home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / dev / e / 2b_CrtvE_src.lha / linker.s < prev    next >
Text File  |  2001-01-29  |  100KB  |  4,967 lines

  1. ;; Linker
  2. ; ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;
  3. ;   The Unit Linking Subroutines.                               ;
  4. ; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
  5.  
  6. HunkList:
  7.     DC.L    0
  8. NumHunks:
  9.     DC.L    1
  10. bgName:
  11.     DC.L    0
  12. bgPri:
  13.     DC.l    0
  14. SetupMod:
  15.     DC.L    0
  16. CleanupMod:
  17.     DC.L    0
  18. InitError:     ; [internal]
  19.     DC.W    0
  20.  
  21. ;; Link module
  22. MMODE:    DC.W    0       ; =D1
  23. THISMOD:  DC.L    0
  24.  
  25. MINIMUMMODULE:
  26.     MOVEQ   #2,D1           ; MODULE IN MAIN FROM OTHER MODULE
  27.     BRA.S   MODULESTART
  28. MODULEJOBENTRY:
  29.     MOVEQ   #0,D1           ; NORMAL MODULE IN MAIN
  30.     TSTMOD
  31.     BEQ.S   MODULESTART
  32.     MOVEQ   #1,D1           ; MODULE IN MODULE
  33. MODULESTART:
  34.     MOVE.W  D1,MMODE
  35.     CLR.W   LOADEDVERSION
  36. DOMODULEJOB:          ; A0=PTR JOBCODE
  37.     MOVE.W  MMODE(PC),D1
  38.     MOVE.W  (A0)+,D0        ; CAN TRASH ANYTHING
  39.     BEQ.S   .1
  40.     CMP.W   #1,D0
  41.     BEQ ADDCONST
  42.     CMP.W   #2,D0
  43.     BEQ ADDOBJECT
  44.     CMP.W   #3,D0
  45.     BEQ ADDCODE
  46.     CMP.W   #4,D0
  47.     BEQ ADDPROCS
  48.     CMP.W   #5,D0
  49.     BEQ ADDSYSCONST
  50.     CMP.W   #6,D0
  51.     BEQ BINDOTHERLIB
  52.     CMP.W   #7,D0
  53.     BEQ ADDRELOC
  54.     CMP.W   #8,D0
  55.     BEQ ADDGLOBSENTRY
  56.     CMP.W   #9,D0
  57.     BEQ ADDMODULES
  58.     CMP.W   #10,D0
  59.     BEQ.S   ADDDEBUG
  60.     CMP.W   #11,D0
  61.     BEQ.S   ADDMACROS
  62.     BRA ERROR36         ; SUPPOSED TO BE OTHER JOBCODES
  63. .1: RTS
  64. ;; AddMacros
  65. ADDMACROS:
  66.     JSR PREPREADMACROS
  67.     BRA DOMODULEJOB
  68. ;*-*
  69. ;; AddDebug
  70. ADDDEBUG:
  71.     MOVE.L  A0,A6           ; A6=DEBUGHUNK
  72.     MOVE.L  4(A6),D0
  73.     ADDQ.L  #2,D0
  74.     LSL.L   #2,D0
  75.     ADD.L   D0,A0           ; skip LINE debug
  76.     CMP.W   #1,D1
  77.     BEQ.S   .NL
  78.     GETM    A2
  79.     MOVE.L  CODELIST(PC),D0
  80.     BNE.S   .NN
  81.     MOVE.L  A2,CODELIST
  82.     BRA.S   .C
  83. .NN:    MOVE.L  CODETAIL(PC),A1
  84.     MOVE.L  A2,(A1)
  85. .C: MOVE.L  A2,CODETAIL
  86.     CLR.L   (A2)+
  87.     MOVE.W  #8,(A2)+
  88.     MOVE.L  DEBUGLIST,(A2)
  89.     MOVE.L  A2,DEBUGLIST
  90.     ADDQ.L  #4,A2
  91.     MOVE.L  A6,(A2)+
  92.     CLR.L   (A2)+
  93.     DONEM   A2
  94. .NL:    CMP.L   #$3F1,(A0)
  95.     BNE.S   .NL2
  96.     MOVE.L  4(A0),D0
  97.     ADDQ.L  #2,D0
  98.     LSL.L   #2,D0
  99.     ADD.L   D0,A0           ; skip EVAR debug
  100. .NL2:   TST.L   (A0)+           ; BLANK TERMINATOR
  101.     BNE ERROR36
  102.     BRA DOMODULEJOB
  103. ;*-*
  104. ;; AddModules
  105. ADDMODULES:
  106.     MOVE.L  (A0)+,D0
  107.     CMP.W   #1,D1
  108.     BNE.S   .XL
  109.     ADD.L   D0,A0
  110.     BRA.W   DOMODULEJOB
  111. .XL:MOVE.W  (A0)+,D0
  112.     BEQ.W   .X
  113.     MOVE.L  A0,A1           ; A1=MODNAME
  114.     ADD.W   D0,A0
  115.     MOVE.L  A1,A2
  116. .C: TST.B   (A2)+
  117.     BNE.S   .C
  118.     MOVE.L  A2,CACHENAMEEND
  119.     MOVE.L  A1,CACHENAMESTART
  120.     JSR SEARCHINMODLIST
  121.     GETM    A3
  122.     TST.L   D0
  123.     BNE.S   .L2
  124.     ADDQ.W  #1,AGAIN        ; SIGNAL NEW MODULES
  125.     MOVE.L  MODINFOLIST,(A3)    ; MI_NEXT
  126.     MOVE.L  A3,MODINFOLIST
  127.     ADDQ.L  #4,A3
  128.     MOVE.W  #$100,(A3)+     ; MI_FLAGS
  129.     SUB.L   A1,A2
  130.     MOVE.L  A2,(A3)+        ; MI_NAMELEN
  131.     CLR.L   (A3)+           ; MI_MOD
  132.     CLR.L   (A3)+           ; MI_LIST
  133.     MOVE.L  A1,(A3)+        ; MI_NAMEPTR
  134. .L2:    MOVE.W  (A0)+,D0
  135.     BEQ.S   .D
  136.     MOVE.W  (A0)+,D1
  137.     MOVE.L  A0,A1           ; A1=PROCCLASS NAME
  138.     ADD.W   D1,A0
  139.     MOVE.L  CODELIST(PC),D1     ; HOOKUP TAIL OF CODEREM
  140.     BNE.S   .NN
  141.     MOVE.L  A3,CODELIST
  142.     BRA.S   .CC
  143. .NN:    MOVE.L  CODETAIL(PC),A2
  144.     MOVE.L  A3,(A2)
  145. .CC:    MOVE.L  A3,CODETAIL
  146.     CLR.L   (A3)+
  147.     CMP.W   #1,D0
  148.     BEQ.S   .CL
  149.     MOVE.W  #5,(A3)+        ; PROC/LAB ACCESS
  150.     MOVE.L  A1,(A3)+
  151.     MOVE.L  A0,(A3)+
  152.     ADDQ.L  #2,A0
  153.     MOVE.W  (A0)+,D0
  154.     LSL.W   #2,D0
  155.     ADD.W   D0,A0
  156.     BRA.S   .L2
  157. .CL:    MOVE.W  #6,(A3)+        ; CLASS ACCESS
  158.     MOVE.L  A1,(A3)+
  159.     MOVE.L  A0,(A3)+
  160.     MOVE.W  (A0)+,D0
  161.     MULU    #6,D0
  162.     ADD.W   D0,A0
  163.     BRA.S   .L2
  164. .D: DONEH   A3
  165.     BRA.W   .XL
  166. .X: BRA.W   DOMODULEJOB
  167. ;*-*
  168. ;; AddGlobals
  169. ADDGLOBSENTRY:
  170.     MOVEQ   #0,D2
  171.     CMP.W   #SKIPMARK,(A0)
  172.     BNE.S   .1
  173.     ADDQ.L  #2,A0
  174.     MOVE.L  (A0)+,D2
  175. .1: CMP.W   #1,D1
  176.     BNE.S   ADDGLOBS
  177.     ADD.L   D2,A0
  178.     TST.L   D2
  179.     BNE.W   DOMODULEJOB
  180.     INTERN  103
  181. ADDGLOBS:
  182.     MOVE.W  (A0)+,D0        ; D0=LEN
  183.     BMI.W   DOMODULEJOB
  184.     MOVE.L  A0,A1           ; A1=NAME
  185.     ADD.W   D0,A0
  186.     MOVE.L  A0,A2           ; A2=OFFSETSTAB
  187.     MOVE.W  LOADEDVERSION(PC),D2
  188.     SUB.W   #10,D2
  189. .XL:TST.L   (A0)+
  190.     BEQ.S   .OUT
  191.     TST.W   D2
  192.     BMI.S   .XL
  193.     ADDQ.L  #2,A0
  194.     BRA.S   .XL
  195. .OUT:   TST.W   D0          ; NOW FIND OFFSET
  196.     BNE.S   VREF
  197.     GETM    A5          ; NOT LINKED INTO HASH TABLE!
  198.     MOVE.L  #.NAME,(A5)+        ; ANONYMOUS VARIABLE
  199.     MOVE.B  #GLOBV,(A5)+        ; SET GLOBAL(=2)
  200.     MOVE.B  #5,(A5)+        ; REF+EXPORT
  201.     CLR.L   (A5)+
  202.     SUBQ.W  #4,NRGLOB
  203.     MOVE.W  NRGLOB,D2
  204.     MOVE.W  D2,(A5)+        ; SET OFFS
  205.     EXT.L   D2
  206.     DONEM   A5
  207.     MOVE.L  A5,D2
  208.     SUBQ.L  #8,D2
  209.     SUBQ.L  #4,D2
  210.     BRA ODONE
  211. .NAME:  DC.B    0,0
  212. VREF:   MOVE.L  A1,A3           ; SEARCH FOR VAR
  213.     HASH    A3,D2,D1
  214.     LSL.L   #2,D2
  215.     ADD.L   #IDENTHASH,D2
  216.     MOVE.L  D2,A3           ; A3=HASHENTRYPTR
  217.     LEA 4(A3),A4
  218. .SL:    MOVE.L  -(A4),A4
  219.     MOVE.L  A4,D2
  220.     BEQ.S   .NOTF
  221.     MOVE.L  (A4),A5
  222.     MOVE.L  A1,A6
  223. .CL:    CMPM.B  (A5)+,(A6)+
  224.     BNE.S   .SL
  225.     TST.B   -1(A5)
  226.     BNE.S   .CL
  227.     MOVE.L  A4,D2           ; JAAAH, BESTAAT REEDS!
  228.     BRA.S   ODONE
  229. .NOTF:  GETM    A5          ; LINKED INTO HASH TABLE!
  230.     MOVE.L  (A3),(A5)+
  231.     MOVE.L  A5,(A3)
  232.     MOVE.L  A1,(A5)+        ; ASCIIPTR
  233.     MOVE.B  #GLOBV,(A5)+        ; SET GLOBAL(=2)
  234.     MOVE.B  #5,(A5)+        ; REF+EXPORT
  235.     CLR.L   (A5)+
  236.     SUBQ.W  #4,NRGLOB
  237.     MOVE.W  NRGLOB,D2
  238.     MOVE.W  D2,(A5)+        ; SET OFFS
  239.     MOVE.L  A5,D2
  240.     SUBQ.L  #8,D2
  241.     SUBQ.L  #4,D2
  242.     DONEM   A5
  243.     ;BRA    ODONE
  244. ODONE:  GETM    A3          ; GOT VAR IN D2, NOW HANG IN CODEREM LIST
  245.     MOVE.L  CODELIST(PC),D1
  246.     BNE.S   .NN
  247.     MOVE.L  A3,CODELIST
  248.     BRA.S   .C
  249. .NN:    MOVE.L  CODETAIL(PC),A4
  250.     MOVE.L  A3,(A4)
  251. .C: MOVE.L  A3,CODETAIL
  252.     CLR.L   (A3)+
  253.     MOVE.W  #4,(A3)+
  254.     MOVE.L  A2,(A3)+
  255.     MOVE.L  D2,(A3)+
  256.     MOVE.W  LOADEDVERSION(PC),(A3)+
  257.     DONEM   A3
  258.     BRA ADDGLOBS
  259. ;*-*
  260. ;; AddCode
  261. ADDCODE:
  262.     MOVE.L  (A0)+,D7
  263.     CMP.W   #1,D1
  264.     BEQ.S   .SKIP
  265.     GETM    A2
  266.     MOVE.L  CODELIST(PC),D0
  267.     BNE.S   .NN
  268.     MOVE.L  A2,CODELIST
  269.     BRA.S   .C
  270. .NN:    MOVE.L  CODETAIL(PC),A1
  271.     MOVE.L  A2,(A1)
  272. .C: MOVE.L  A2,CODETAIL
  273.     CLR.L   (A2)+
  274.     MOVE.W  #2,(A2)+
  275.     MOVE.L  A0,(A2)+
  276.     MOVE.L  D7,(A2)+
  277.     LSL.L   #2,D7
  278.     ADD.L   D7,A0
  279.     DONEM   A2
  280.     BRA DOMODULEJOB
  281. .SKIP:  LSL.L   #2,D7
  282.     ADD.L   D7,A0
  283.     BRA DOMODULEJOB
  284. ;*-*
  285. CODELIST:     DC.L    0
  286. CODETAIL:     DC.L    0
  287. ;; AddReloc
  288. ADDRELOC:
  289.     MOVE.L  (A0)+,D7
  290.     CMP.W   #1,D1
  291.     BEQ.S   .SKIP
  292.     GETM    A2
  293.     MOVE.L  CODELIST(PC),D0
  294.     BNE.S   .NN
  295.     MOVE.L  A2,CODELIST
  296.     BRA.S   .C
  297. .NN:    MOVE.L  CODETAIL(PC),A1
  298.     MOVE.L  A2,(A1)
  299. .C: MOVE.L  A2,CODETAIL
  300.     CLR.L   (A2)+
  301.     MOVE.W  #3,(A2)+
  302.     MOVE.L  A0,(A2)+
  303.     MOVE.L  D7,(A2)+
  304.     CLR.L   (A2)+
  305.     LSL.L   #2,D7
  306.     ADD.L   D7,A0
  307.     DONEM   A2
  308.     BRA DOMODULEJOB
  309. .SKIP:  LSL.L   #2,D7
  310.     ADD.L   D7,A0
  311.     BRA DOMODULEJOB
  312. ;*-*
  313. ;; AddSystem
  314. ADDSYSCONST:
  315.     MOVE.L  (A0)+,D0
  316.     CMP.W   #1,D1
  317.     BEQ.S   .S1
  318.     ADD.L   D0,MINSTACK     ; ADD USED TO STACK
  319. .S1:    MOVE.W  (A0)+,D0
  320.     CMP.W   OSVERSION,D0        ; HIGHEST OSVERSION
  321.     BLE.S   .1
  322.     MOVE.W  D0,OSVERSION
  323.     BSET    #4,WARNINGS+3
  324. .1: MOVE.L  (A0)+,D0
  325.     AND.L   #%11011011000110000000000000000000,D0  ; ONLY INTERESTING BITS
  326.     OR.L    D0,CODEPREFS
  327.     MOVE.W  (A0)+,D0
  328.     CMP.W   ECPU,D0         ; BEST CPU
  329.     BLE.S   .2
  330.     MOVE.W  D0,ECPU
  331.     BSET    #4,WARNINGS+3
  332. .2: MOVE.W  (A0)+,D0        ; BEST FPU
  333.     CMP.W   EFPU,D0
  334.     BLE.S   .3
  335.     MOVE.W  D0,EFPU
  336.     BSET    #4,WARNINGS+3
  337. .3: MOVE.W  (A0)+,D0        ; OR BITSET
  338.     MOVE.W  ASMCPU,D3
  339.     OR.W    D3,D0
  340.     CMP.W   D3,D0
  341.     BEQ.S   .4
  342.     MOVE.W  D0,ASMCPU
  343.     BSET    #4,WARNINGS+3
  344. .4: MOVE.W  (A0)+,D0        ; VERSION
  345.     BNE.S   .5
  346.     ADDQ.W  #1,D0           ; 0 is version 1
  347. .5: MOVE.W  D0,LOADEDVERSION
  348.     CMP.W   #CURVERSION,D0
  349.     BHI ERROR51
  350.     ADDQ.L  #4,A0           ; RESERVED
  351.     CMP.W   #11,LOADEDVERSION
  352.     BLT     .x
  353.     MOVE.L  (A0)+,D0
  354.     AND.L   #%1,D0
  355.     OR.L    D0,ICODEPREFS
  356. .x:
  357.     JSR     PATCHER
  358.     BRA DOMODULEJOB
  359. ;*-*
  360. ;; AddProcs
  361. ADDPROCS:
  362. .XL:MOVE.W  (A0)+,D0
  363.     CMP.W   #-1,D0
  364.     BEQ DOMODULEJOB
  365.     GETM    A4
  366.     EXT.L   D0
  367.     MOVE.L  A0,A1
  368.     HASH    A1,D1,D2
  369.     LSL.L   #2,D1
  370.     MOVE.L  #IDENTHASH,A1
  371.     ADD.L   D1,A1
  372.     MOVE.L  (A1),(A4)+
  373.     MOVE.L  A4,(A1)
  374.     MOVE.L  A4,D6           ; REMIND THIS IDENT=D6
  375.     MOVE.L  A0,(A4)+
  376.  
  377. ;    MOVEM.L D0-A6,-(A7)
  378. ;    MOVE.L  A0,D2
  379. ;.xx:TST.B   (A0)+
  380. ;    BNE     .xx             ; this section
  381. ;    MOVE.L  A0,D3           ; writes down
  382. ;    SUB.L   D2,D3           ; the procedures
  383. ;    JSR WRITECON
  384. ;    MOVE.L  #CLINE,D2
  385. ;    MOVEQ   #2,D3
  386. ;    JSR WRITECON
  387. ;    MOVEM.L (A7)+,D0-A6
  388.  
  389.  
  390.     MOVE.B  #LAB,(A4)+
  391.     MOVE.B  #1,(A4)+        ; FLAGS: USED  (NEVER EXPORT!)
  392.     ADD.L   D0,A0           ; skip name
  393.     MOVE.L  (A0)+,D7        ; D7=OFFSET
  394.     CMP.W   #1,(A0)+        ; label/proc
  395.     BNE     .LAB            ;
  396.     LEA 14(A4),A3           ; note: 14
  397.     MOVE.L  A3,(A4)+        ; Proc ptr
  398.     MOVE.W  #-2,(A4)+       ; type [proc]
  399.     CLR.L   (A4)+           ; heavy
  400.     MOVE.L  PROCLIST,(A4)+  ; now proc:
  401.     MOVE.L  A4,PROCLIST     ;
  402.     MOVE.W  (A0)+,(A4)+     ; args
  403.     CLR.W   (A4)+           ; FLAGS,REGVARS
  404.     MOVE.W  (A0)+,(A4)+     ; nr loc vars
  405.     CMP.W   #-1,(A0)
  406.     BEQ     .REGSONLY
  407.     CMP.W   #-2,(A0)
  408.     BEQ     .MORE_STUFF
  409.     MOVE.L  A0,(A4)+        ; DEFARGS
  410. .REGSBACK:
  411.     CLR.L   (A4)+           ; of_object
  412.     MOVE.L  D6,(A4)+        ; IDENT
  413.     CLR.L   (A4)+           ; SELF
  414.     CLR.L   (A4)+           ; METHOD
  415.     MOVE.W  (A0)+,D0
  416.     LSL.W   #2,D0
  417.     ADD.W   D0,A0
  418.     MOVE.W  (A0)+,D0
  419.     ADD.W   D0,A0
  420.     BRA     .CODE
  421. .REGSONLY:
  422.     ADDQ.L  #2,A0
  423.     moveq   #0,d0
  424.     MOVE.W  (A0),D0
  425.     ADD.L   D0,D0
  426.     BSET    #5,-4(a4)
  427.     move.l  a0,(a4)+
  428.     ADD.L   D0,A0
  429.     ADDQ.L  #2,A0
  430.     bra     .REGSBACK
  431. .MORE_STUFF:
  432.     ADDQ.L  #2,A0
  433.     MOVEM.L D0-D7/A1-A6,-(A7)
  434.     MOVEQ   #8,D0
  435.     JSR NEW
  436.     MOVE.L  D0,A1
  437.     cmp.w   #64,(a0)+
  438.     BEQ     .M2
  439.     MOVE.L  CleanupMod(PC),(A1)+
  440.     MOVe.L  A1,CleanupMod
  441.     BSET    #7,-4(A4)
  442.     BRA     .M1
  443. .M2:MOVE.L  SetupMod(PC),(A1)+
  444.     MOVe.L  A1,SetupMod
  445.     BSET    #6,-4(A4)
  446. .M1:MOVE.L  A4,(A1)
  447.     SUB.L   #6,(A1)+
  448.     MOVEM.L (A7)+,D0-D7/A1-A6
  449.     CLR.L   (A4)+
  450.     BRA .REGSBACK
  451.  
  452. .LAB:   CLR.L   (A4)+           ; LABEL
  453.     MOVE.W  #-1,(A4)+
  454.     CLR.L   (A4)+           ; EXTRA!!
  455. .CODE:  CMP.W   #1,MMODE        ; CHECK IF MOD IN MOD
  456.     BEQ.S   .1
  457.     MOVE.L  CODETAIL(PC),A1
  458.     MOVE.L  A4,(A1)
  459.     MOVE.L  A4,CODETAIL
  460.     CLR.L   (A4)+
  461.     MOVE.W  #1,(A4)+
  462.     MOVE.L  D6,(A4)+
  463.     MOVE.L  D7,(A4)+
  464. .2: DONEM   A4
  465.     BRA .XL
  466. .EX:    BRA DOMODULEJOB
  467. .1: MOVE.L  THISMOD(PC),A1      ; A1=MODINFO
  468.     MOVE.L  D6,A2           ; A2=ID
  469.     SUBQ.W  #2,10(A2)
  470.     MOVE.L  MI_LIST(A1),(A4)    ; PC_NEXT
  471.     MOVE.L  A4,MI_LIST(A1)
  472.     MOVE.L  A4,VARHEAVY(A2)
  473.     ADDQ.L  #4,A4
  474.     MOVE.W  #2,(A4)+        ; PC_TYPE
  475.     MOVE.L  D6,(A4)+        ; PC_INFO
  476.     CLR.L   (A4)+           ; PC_ACC
  477.     BRA.S   .2
  478. ;*-*
  479. ;; FixProcCode
  480. FIXPROCCODE:          ; RESOLVE ADDRESSES OF CODE IN MODULES
  481.     MOVEM.L A0-A3/D0-D4/A5,-(A7)    ; EXPECTS CODE IN A4
  482.     LEA CODELIST(PC),A0     ; A0=CODEREM
  483.     MOVE.L  LABM+8,A2       ; A2=LABELS
  484. .XL:MOVE.L  (A0),A0
  485.     MOVE.L  A0,D0
  486.     BEQ .E
  487.     MOVE.W  4(A0),D0
  488.     CMP.W   #2,D0
  489.     BNE.S   .ID
  490.     MOVE.L  6(A0),A1        ; CODE + LEN
  491.     MOVE.L  10(A0),D1
  492.     SUBQ.L  #1,D1
  493.     MOVE.L  A4,D2           ; D2=COPIED CODEBASE
  494.     MOVE.L  D2,10(A0)       ; SET LEN FIELD TO CODEBASE!
  495.  
  496.     MOVE.L  D1,D0           ;
  497.     LSL.L   #2,D0           ;
  498.     ADD.L   A4,D0           ; CHECK CODEBUF
  499.     MOVE.L  D0,CURACODE     ;
  500.     JSR CHECK3          ;
  501.     MOVE.L  A4,CURACODE     ;
  502.  
  503. .C: MOVE.L  (A1)+,(A4)+
  504.     DBRA    D1,.C
  505.     BRA.S   .XL
  506. .ID:    CMP.W   #1,D0
  507.     BNE.S   .REL
  508.     MOVE.L  6(A0),A3
  509.     MOVEQ   #0,D3
  510.     MOVE.W  10(A3),D3
  511.     LSL.L   #2,D3
  512.     MOVE.L  10(A0),D1       ; OFFSET
  513.     ADD.L   D2,D1
  514.     MOVE.L  D1,0(A2,D3.L)       ; SET LABEL
  515.     BRA.S   .XL
  516.  
  517. .REL:   CMP.W   #3,D0
  518.     BNE.S   .GLOB
  519.     MOVE.L  A4,-(A7)
  520.     MOVE.L  6(A0),A3
  521.     MOVE.L  10(A0),D3
  522.     SUBQ.L  #1,D3
  523.     MOVE.L  A0,-(A7)
  524.     MOVE.L  #EFUNCBYTE,A1
  525.     MOVE.L  D2,D4
  526.     SUB.L   ACODE,D4        ; D4=MOD OFFSET
  527. .RELL:
  528.     MOVE.L  (A3),D0
  529.     BPL.S   .NEXT
  530.     MOVEQ   #31,D1
  531.     BCLR    D1,D0
  532.     MOVE.L  D0,A4
  533.     ADD.L   D2,A4
  534.     MOVE.W  2(A4),D0
  535.     JSR ADDBRANCHRELOC
  536.     MOVE.B  #-1,-10(A1,D0)
  537.  
  538.     ADDQ.L  #4,A3
  539.     DBRA    D3,.RELL
  540.     BRA.S   .Q
  541. .NEXT:
  542.     ADDQ.L  #4,A3           ; WAS: ADD.L    D4,(A3)+
  543.     ADD.L   D2,D0
  544.     MOVE.L  D0,A5
  545.     ADD.L   D4,(A5)         ; PATCH NEW CODE
  546.     DBRA    D3,.RELL
  547. .Q: MOVE.L  (A7)+,A0
  548.     MOVE.L  (A7)+,A4
  549.     BRA .XL
  550.  
  551. .GLOB:  CMP.W   #4,D0
  552.     BNE.S   .CLSSX
  553.     MOVE.L  10(A0),A3
  554.     MOVE.W  10(A3),D0       ; D0.W=A4OFFSET
  555.     MOVE.L  6(A0),A3
  556.     CMP.W   #10,14(A0)
  557.     BPL.S   .NG
  558. .GLL:   MOVE.L  (A3)+,D1
  559.     BEQ .XL
  560.     MOVE.L  D1,A1
  561.     ADD.L   D2,A1
  562.     MOVE.W  D0,(A1)
  563.     BRA .GLL
  564. .NG:    ADDQ.W  #4,D0           ; VERSION WITH EXTRA OPERSIZE
  565. .NGLL:  MOVE.L  (A3)+,D1
  566.     BEQ .XL
  567.     MOVE.L  D1,A1
  568.     ADD.L   D2,A1
  569.     MOVE.W  D0,D3
  570.     SUB.W   (A3)+,D3
  571.     MOVE.W  D3,(A1)
  572.     BRA .NGLL
  573.  
  574. .CLSSX: CMP.W   #7,D0           ; CLASSX ACC RESOLVE HERE
  575.     BNE.W   .CLASS
  576.     MOVE.L  10(A0),D0
  577.     ADD.L   D2,D0           ; D0=ABS DELCODE
  578.     MOVE.L  6(A0),A1        ; A1=OBJH
  579.     MOVE.L  D0,ODCODE(A1)
  580.     MOVE.L  14(A0),A3       ; A3=ACCVALS
  581.     LEA OACC(A1),A1     ; A1=ACCLIST
  582.     MOVE.L  A0,-(A7)
  583. .CLL:   MOVE.W  (A3)+,D0
  584.     CMP.W   #-1,D0
  585.     BEQ.S   .CLLX
  586.     GETM    A0
  587.     MOVE.L  (A1),(A0)
  588.     MOVE.L  A0,(A1)
  589.     ADDQ.L  #4,A0
  590.     MOVE.L  (A3)+,D1
  591.     ADD.L   D2,D1
  592.     MOVE.L  D1,(A0)+
  593.     MOVE.W  D0,(A0)+
  594.     DONEM   A0
  595.     BRA.S   .CLL
  596. .CLLX:  MOVE.L  (A7)+,A0
  597.     BRA .XL
  598.  
  599. .DEBUG: CMP.W   #8,D0
  600.     BNE.S   .PROC
  601.     MOVE.L  D2,D1
  602.     SUB.L   ACODE,D1
  603.     MOVE.L  D1,14(A0)
  604.     BRA .XL
  605.  
  606. .PROC:  CMP.W   #5,D0
  607.     ;BNE.S  .           ; PROC ACC RESOLVE HERE
  608.     BRA .XL
  609.  
  610. .CLASS: CMP.W   #6,D0           ; CLASS ACC RESOLVE HERE
  611.     BNE.S   .DEBUG
  612.     MOVE.L  6(A0),D1
  613.     JSR FINDOBJ
  614.     TST.L   D0
  615.     BEQ.S   .NOTF
  616.     MOVE.L  D0,A1           ; A1=OBJ
  617.     LEA OACC(A1),A1
  618.     MOVE.L  10(A0),A3       ; A3=ACCL
  619.     MOVE.W  (A3)+,D0
  620.     SUBQ.L  #1,D0
  621. .CAL:   GETM    A6
  622.     MOVE.L  (A1),(A6)
  623.     MOVE.L  A6,(A1)
  624.     ADDQ.L  #4,A6
  625.     MOVE.L  (A3)+,D1
  626.     ADD.L   D2,D1
  627.     MOVE.L  D1,(A6)+
  628.     MOVE.W  (A3)+,(A6)+
  629.     DONEM   A6
  630.     DBRA    D0,.CAL
  631.     BRA .XL
  632. .NOTF:  MOVE.L  D1,ERROROBJ
  633.     BRA ERROR57
  634.  
  635. .E: MOVEM.L (A7)+,A0-A3/D0-D4/A5
  636.     RTS
  637. ;*-*
  638. ;; AddConst
  639. ADDCONST:
  640.     CMP.W   #6,LOADEDVERSION
  641.     BMI.S   .XL
  642.     MOVE.L  (A0)+,D0
  643.     CMP.W   #2,D1
  644.     BNE.S   .XL
  645.     ADD.L   D0,A0
  646.     BRA DOMODULEJOB
  647. .XL:cmp.b   #-1,(a0)
  648.     beq     .TYPED
  649.     MOVE.W  (A0)+,D0        ; D0=LEN ASC
  650.     BEQ.S   .1
  651.     GETM    A5
  652.     MOVE.L  (A0)+,D1
  653.     MOVE.L  A0,A1
  654.     bsr     .H
  655.     LSL.L   #2,D2
  656.     ADD.L   #CONSTHASH,D2
  657.     MOVE.L  D2,A1
  658.     MOVE.L  (A1),(A5)
  659.     MOVE.L  A5,(A1)
  660.     ADDQ.L  #4,A5
  661.     MOVE.L  A0,(A5)+
  662.     MOVE.L  D1,(A5)+
  663.     CLR.W   (A5)+
  664.     EXT.L   D0
  665.     ADD.L   D0,A0
  666.     DONEM   A5
  667.     BRA.S   .XL
  668. .1: BRA DOMODULEJOB
  669.  
  670. .H: HASH A1,D2,D3
  671.     RTS
  672.  
  673. .TYPED:
  674.     addq.l  #2,a0
  675.     MOVE.W  (A0)+,D0        ; D0=LEN ASC
  676.     BEQ.S   .1
  677.     GETM    A5
  678.     MOVE.L  A0,A1
  679.     bsr     .H
  680.     LSL.L   #2,D2
  681.     ADD.L   #CONSTHASH,D2
  682.     MOVE.L  D2,A1
  683.     MOVE.L  (A1),(A5)
  684.     MOVE.L  A5,(A1)
  685.     ADDQ.L  #4,A5
  686.     MOVE.L  A0,(A5)+
  687.     ext.l   d0
  688.     add.l   d0,a0
  689.     move.w  (a0),d0
  690.     addq.l  #3,d0
  691.     MOVE.L  a0,(A5)+
  692.     move.b  #2,(a5)+
  693.     CLR.B   (A5)+
  694.     ext.l   d0
  695.     ADD.L   D0,A0
  696.     move.l  a0,d0
  697.     btst    #0,d0
  698.     beq     .CC
  699.     addq.l  #1,d0
  700. .CC:DONEM   A5
  701.     BRA     .XL
  702.  
  703. ;*-*
  704. ;; AddObject
  705. ADDOBJECT:
  706.     CMP.W   #6,LOADEDVERSION
  707.     BMI.S   .1
  708.     MOVE.L  (A0)+,D0
  709.     ;CMP.W  #2,D1           ; ever?
  710.     ;BNE.S  .1
  711.     ;ADD.L  D0,A0
  712.     ;BRA    DOMODULEJOB
  713. .1: ADDQ.W  #1,OBJCOUNT
  714.     MOVE.W  OBJCOUNT(PC),D5
  715.     GETM    A5
  716.     MOVE.W  (A0)+,D0        ; D0=LEN ASC
  717.     BEQ ERROR39             ; module crashed
  718.     MOVE.W  (A0)+,D1        ;
  719.     CMP.W   #-1,D1          ;
  720.     BNE ERROR39             ; must be object header
  721.     MOVE.L  OLIST,(A5)+     ;
  722.     MOVE.L  A5,OLIST        ;
  723.     ADDQ.L  #2,A0           ; OFF MAKES NO SENSE FOR HEAD
  724.     CLR.W   (A5)+           ; DELEGATESIZE=0
  725.     MOVE.W  #%1000000000,(A5)+  ; SET IMPORT
  726.     MOVE.L  A5,A4           ; A4=SIZE.W OBJ
  727.     CLR.W   (A5)+           ; STILL 0
  728.     MOVE.W  D5,(A5)+
  729.     MOVE.L  A0,(A5)+
  730.  
  731.     cmp.l   #"exec",(A0)
  732.     bne     .0
  733.     CMP.L   #"base",4(a0)
  734.     bne     .0
  735.     cmp.b   #0,8(a0)
  736.     bne     .0
  737.     move.l  OLIST,OBJ_EXECBASE
  738. .0:
  739.     cmp.l   #"intu",(a0)
  740.     bne     .01
  741.     cmp.l   #"itio",4(a0)
  742.     bne     .01
  743.     cmp.l   #"nbas",8(a0)
  744.     bne     .01
  745.     cmp.w   #"e"*256,12(a0)
  746.     bne     .01
  747.     move.l  OLIST,OBJ_INTUIBASE
  748. .01:
  749.     cmp.l   #"gfxb",(a0)
  750.     bne     .02
  751.     cmp.l   #"ase"*256,4(a0)
  752.     bne     .02
  753.     move.l  OLIST,OBJ_GFXBASE
  754. .02:
  755.     cmp.l   #"dosb",(a0)
  756.     bne     .03
  757.     cmp.l   #"ase"*256,4(a0)
  758.     bne     .03
  759.     move.l  OLIST,OBJ_DOSBASE
  760. .03:
  761.     cmp.l   #"wbst",(a0)
  762.     bne     .04
  763.     cmp.l   #"artu",4(a0)
  764.     bne     .04
  765.     cmp.w   #"p"*256,8(a0)
  766.     bne     .04
  767.     move.l  OLIST,OBJ_WBMESSAGE
  768. .04:
  769.     cmp.l   #"rast",(a0)
  770.     bne     .05
  771.     cmp.l   #"port",4(a0)
  772.     bne     .05
  773.     tst.b   8(a0)
  774.     bne     .05
  775.     move.l  OLIST,OBJ_RASTPORT
  776. .05:
  777.     MOVE.L  A5,A6           ; A6=_TAIL_ MEMBER LIST
  778.     CLR.L   (A5)+           ; MEMBERLIST=0
  779.     CLR.L   (A5)+           ; METHODLIST=0
  780.     CLR.L   (A5)+           ; SUPERCLASS=0
  781.     CLR.L   (A5)+           ; DELEGATECODE=NIL
  782.     CLR.L   (A5)+           ; ACCESLIST
  783.     MOVE.L  #-1,(A5)+       ; DELOFFSET+DESTRUCTOFF
  784.     EXT.L   D0
  785.     ADD.L   D0,A0
  786.     DONEM   A5
  787. ADDOBJECTLOOP:
  788.     MOVE.W  (A0)+,D0        ; D0=LEN ASC
  789.     BEQ     .1              ; last one
  790.     GETM    A5              ;
  791.     MOVE.W  (A0)+,D1        ;
  792.     CLR.L   (A5)+           ; ONEXT
  793.     MOVE.L  A5,(A6)         ;
  794.     LEA ONEXT(A5),A6        ;
  795.     CLR.L   (A6)            ;
  796.     MOVE.W  (A0)+,(A5)+     ; OOFF
  797.     CLR.W   (A5)+           ; OFLAGS
  798.     MOVE.W  D1,(A5)+        ; OSIZE
  799.     MOVE.W  D5,(A5)+        ; OID
  800.     TST.W   D0
  801.     BMI.S   .PRIV
  802.     MOVE.L  A0,(A5)+        ; OASCII
  803.     EXT.L   D0
  804.     ADD.L   D0,A0
  805.     BRA.S   .3
  806. .PRIV:
  807.     CLR.L   (A5)+           ; OASCII
  808. .3: CMP.W   #6,LOADEDVERSION
  809.     BMI.S   .4
  810.     MOVEQ   #0,D0
  811.     MOVE.W  (A0)+,D0
  812.     BEQ.S   .4
  813.     BPL.S   .5
  814.     MOVE.W  (A0)+,D0
  815.     ; HERE WE CAN SEARCH FOR AN OBJECT THAT EQUALS A0
  816.     MOVE.L  A0,(A5)+
  817.     ADD.W   D0,A0
  818.     MOVE.L  OBJTYPELIST(PC),D0
  819.     MOVE.L  A5,OBJTYPELIST
  820. .5: MOVE.L  D0,(A5)+
  821.     BSET    #1,OFLAGS+4(A6)
  822. .4: DONEM   A5
  823.     BRA     ADDOBJECTLOOP
  824. .1: MOVE.W  (A0)+,D0
  825.     BTST    #0,D0
  826.     BEQ.S   .2
  827.     ADDQ.W  #1,D0
  828. .2: MOVE.W  D0,(A4)         ; SET OBJSIZE
  829.  
  830.     CMP.W   #7,LOADEDVERSION
  831.     BMI.W   .NC
  832.     MOVE.W  (A0)+,D0
  833.     BEQ.W   .NC
  834.     MOVE.L  OLIST,A1        ; A1=OBJECTHEAD
  835.     MOVE.W  D0,ODEL(A1)
  836.     MOVE.L  (A0)+,D0        ; DELCODE
  837.     CMP.W   #1,MMODE
  838.     BEQ.S   .NDC
  839.  
  840.     GETM    A3
  841.     MOVE.L  CODELIST(PC),D1     ; HOOKUP TAIL OF CODEREM
  842.     BNE.S   .NN
  843.     MOVE.L  A3,CODELIST
  844.     BRA.S   .CC
  845. .NN:    MOVE.L  CODETAIL(PC),A2
  846.     MOVE.L  A3,(A2)
  847. .CC:    MOVE.L  A3,CODETAIL
  848.     MOVE.L  A3,D7           ; D7=CODEREM_STRUCT
  849.     CLR.L   (A3)+
  850.     MOVE.W  #7,(A3)+
  851.     MOVE.L  A1,(A3)+
  852.     MOVE.L  D0,(A3)+
  853.     CLR.L   (A3)+
  854.     DONEM   A3
  855.     BRA.S   .CONT
  856.  
  857. .NDC:
  858.     MOVEM.L A6/A5,-(A7)
  859.     MOVE.L  THISMOD(PC),A6      ; A6=MODINFO
  860.     CLR.L   ODCODE(A1)
  861.     GETM    A5
  862.     MOVE.L  MI_LIST(A6),(A5)    ; PC_NEXT
  863.     MOVE.L  A5,MI_LIST(A6)
  864.     ADDQ.L  #4,A5
  865.     MOVE.W  #1,(A5)+        ; PC_TYPE
  866.     MOVE.L  A1,(A5)+        ; PC_INFO
  867.     CLR.L   (A5)+           ; PC_ACC
  868.     DONEM   A5
  869.     MOVEM.L (A7)+,A6/A5
  870.  
  871. .CONT:  ADD.W   (A0)+,A0        ; SKIP SUPER
  872.     MOVE.L  (A0)+,ODELOFF(A1)   ; DELOFF+DESTR
  873.     LEA OMETHOD(A1),A3      ; A3=METHODLIST
  874. .ML:    MOVE.W  (A0)+,D0
  875.     CMP.W   #-1,D0
  876.     BEQ.S   .MX
  877.     GETM    A2          ; A2=MEM
  878.     MOVE.L  A2,A4           ; A4=METHOD
  879.     MOVE.L  (A3),(A2)       ; M_NEXT
  880.     MOVE.L  A4,(A3)
  881.     ADDQ.L  #8,A2
  882.     MOVE.W  D0,(A2)+        ; M_TYPE+M_FLAGS
  883.     MOVE.W  (A0)+,(A2)+     ; M_OFF
  884.     MOVE.W  (A0)+,D0
  885.     MOVE.L  A0,(A2)+        ; M_NAME
  886.     ADD.W   D0,A0
  887.     MOVE.L  A2,4(A4)        ; M_PROC
  888.     MOVE.W  (A0)+,(A2)+     ; PROC_NARGS
  889.     MOVE.L  #$2000000,(A2)+     ; flags=method
  890.     CLR.L   (A2)+
  891.     MOVE.W  (A0)+,D0
  892.     BEQ.S   .NDA
  893.     MOVE.L  A0,-4(A2)       ; PROC_DEFARGS
  894.     SUBQ.L  #2,-4(A2)
  895.     LSL.W   #2,D0
  896.     ADD.W   D0,A0
  897. .NDA:   MOVE.L  A1,(A2)+        ; PROC_OFOBJECT
  898.     CLR.L   (A2)+
  899.     CLR.L   (A2)+
  900.     MOVE.L  A4,(A2)+        ; PROC_METHOD
  901.     DONEM   A2
  902.     BRA.S   .ML
  903. .MX:
  904.     CMP.W   #1,MMODE
  905.     BEQ.S   .AS
  906.     MOVE.L  D7,A2
  907.     MOVE.L  A0,14(A2)
  908. .AS:
  909. .AL:    CMP.W   #-1,(A0)+
  910.     BEQ.S   .AX
  911.     ADDQ.L  #4,A0
  912.     BRA.S   .AL
  913. .AX:
  914. .NC:    BRA DOMODULEJOB
  915. ;*-*
  916. OBJTYPELIST:  DC.L    0
  917.  
  918. ;; FixObjTypes
  919. FIXOBJTYPES:
  920.     LEA OBJTYPELIST(PC),A6
  921. .XL:MOVE.L  (A6),D0
  922.     BEQ.S   .X
  923.     MOVE.L  D0,A6
  924.     MOVE.L  -4(A6),D1
  925.     JSR FINDOBJ
  926.     TST.L   D0
  927.     BEQ.S   .ER
  928. .R: MOVE.L  D0,-4(A6)
  929.     BRA.S   .XL
  930. .X: RTS
  931. .ER:    MOVEQ   #4,D0
  932.     BRA.S   .R
  933.  
  934. ;   MOVE.L  -4(A6),ERROROBJ
  935. ;   BRA ERROR62
  936. ;*-*
  937. ;; BindOtherLib
  938. BINDOTHERLIB:
  939.     CMP.W   #2,D1           ; JUST DONE IF LIBINFOS IN SECONDARY
  940.     BNE.S   .1
  941.     RTS
  942. .1: TST.B   (A0)+           ; SKIP LIBNAME FOR NOW
  943.     BNE.S   .1
  944.     MOVE.L  A0,A1
  945.     HASH    A1,D0,D1
  946.     LSL.L   #2,D0
  947.     ADD.L   #IDENTHASH,D0
  948.     MOVE.L  D0,A1
  949.  
  950.     MOVE.L  A1,A4
  951.     ADDQ.L  #4,A4
  952. .SL:    MOVE.L  -(A4),D0
  953.     BEQ.S   .SD
  954.     MOVE.L  D0,A4
  955.     MOVE.L  (A4),A5
  956.     MOVE.L  A0,A6
  957. .SC:    CMPM.B  (A5)+,(A6)+
  958.     BNE.S   .SL
  959.     TST.B   -1(A5)
  960.     BNE.S   .SC
  961.     CMP.B   #GLOBV,4(A4)
  962.     BNE.S   .SL
  963.     MOVE.W  10(A4),D7
  964.     BRA.W   BLABLABLA
  965.  
  966. .SD:    GETM    A5          ; ADD BASE AS VAR
  967.     MOVE.L  (A1),(A5)+
  968.     MOVE.L  A5,(A1)
  969.     MOVE.L  A0,(A5)+        ; SET ASCIIPTR
  970.     MOVE.B  #GLOBV,(A5)+        ; SET GLOBAL(=2)
  971.     MOVE.B  #4,(A5)+        ; UNREF+SYSTEMVAR+EXPORT
  972.     CLR.L   (A5)+
  973.     SUBQ.W  #4,NRGLOB
  974.     MOVE.W  NRGLOB,(A5)+        ; SET OFFS
  975.     DONEM   A5
  976. BLURP:
  977.     LEA -12(A5),A5
  978.     TSTMOD
  979.     BEQ.S   .3          ; REMEMBER OFFSET
  980.     GETM    A1
  981.     MOVE.L  OFFSLIST(PC),(A1)+
  982.     MOVE.L  A5,(A1)+
  983.     DONEM   A1
  984.     SUBQ.L  #8,A1
  985.     MOVE.L  A1,OFFSLIST
  986. .3: GINFO   A0,A1,A5
  987.     MOVE.W  NRGLOB,D7       ; BASE OF LIB
  988.  
  989. BLABLABLA:
  990. .2: TST.B   (A0)+
  991.     BNE.S   .2
  992.     MOVE.L  A0,A5
  993.     MOVE.L  A0,-(A7)
  994.     BSR.W   ADDLIBS2
  995.     MOVE.L  (A7)+,A0
  996.     RTS
  997. OFFSLIST: DC.L    0
  998.  
  999. DOOFF:                ; GETS OFF IN D0, PRESERVES D0
  1000.     TSTMOD
  1001.     BEQ.S   .1
  1002.     CMP.W   #GLOBOFF+8,D0
  1003.     BPL.S   .1
  1004.     MOVEM.L A0/A1/D1,-(A7)
  1005.     LEA OFFSLIST(PC),A0
  1006. .XL:MOVE.L  (A0),A0
  1007.     MOVE.L  A0,D1
  1008.     BEQ.S   .3
  1009.     MOVE.L  4(A0),A1
  1010.     CMP.W   10(A1),D0
  1011.     BNE.S   .XL
  1012.     GENGI   A1,D1
  1013.     MOVEM.L (A7)+,A0/A1/D1
  1014. .1: RTS
  1015. .3: INTERN  101
  1016. ;*-*
  1017.  
  1018. SETUPLIBS:
  1019.     BSR ADDLIBS
  1020.     RTS
  1021.  
  1022. SETUPUTIL:
  1023.     LEA UTIL,A5
  1024.     MOVE.W  #-124,D7
  1025.     BSR     ADDLIBS2
  1026.     RTS
  1027.  
  1028. ADDLIBS:
  1029.     LEA EXEC,A5
  1030.     MOVE.W  #-40,D7
  1031.     BSR.S   ADDLIBS2
  1032.     LEA DOS,A5
  1033.     MOVE.W  #-44,D7
  1034.     BSR.S   ADDLIBS2
  1035.     LEA INTUI,A5
  1036.     MOVE.W  #-48,D7
  1037.     BSR.S   ADDLIBS2
  1038.     LEA GFX,A5
  1039.     MOVE.W  #-52,D7
  1040.     BSR.S   ADDLIBS2
  1041. ;   LEA MATH(PC),A5
  1042. ;   MOVE.W  #-56,D7
  1043. ;   BSR.S   ADDLIBS2
  1044.     RTS
  1045.  
  1046. ADDLIBS2:             ; PAR: A5=LIB DATA, D7=OFFSET OF CUR. LIB.
  1047.     MOVE.W  #-30,D6         ; D6=OFFSET OF CUR. CALL
  1048.     MOVE.L  CURLIBASC,A4        ; A4=LIBSTRUCTS
  1049.     JSR CHECK3
  1050. .XL:CMP.B   #-1,(A5)
  1051.     BEQ.S   .OUT
  1052.     MOVE.L  A5,(A4)+        ; ptr to ascii
  1053.     MOVE.W  D7,(A4)+        ; xbase offset
  1054.     MOVE.W  D6,(A4)+        ; own offset
  1055.     MOVE.W  #-1,(A4)+       ; EXCEPTION INDEX
  1056.     SUBQ.W  #6,D6
  1057. .F: CMP.B   #32,(A5)+       ; NOW GET TO THE NEXT
  1058.     BPL .F
  1059.     CMP.B   #16,-1(A5)
  1060.     BEQ.S   .XL
  1061. .F2:    TST.B   (A5)
  1062.     BMI.S   .XL
  1063.     CMP.B   #16,(A5)
  1064.     BPL.S   .XL
  1065.     ADDQ.L  #1,A5
  1066.     BRA.S   .F2
  1067. .OUT:   MOVE.L  A4,CURLIBASC
  1068.     CLR.L   (A4)
  1069.     CLR.L   4(A4)
  1070.     CLR.L   8(A4)
  1071.     RTS
  1072. ;*-*
  1073. ;; ParseObjectFile
  1074. PARSEOBJECTFILE:
  1075. ; Gets start of "module" in D0,
  1076. ; it's len in d1,
  1077. ; it's real pos in d2
  1078. ; and real len in d3
  1079. ;
  1080. ; d2 and d3 are for the binaries, when d0 and d1 are for plain text!!!
  1081.  
  1082.     MOVEM.L D0-D7/A0-A6,-(A7)
  1083.     MOVE.L  D0,A0   ;start
  1084.     MOVe.L  A0,A1
  1085.     ADD.L   D1,A1   ;end
  1086.     move.l  d2,a2
  1087.     move.l  a2,a3
  1088.     add.l   d3,a3   ;if not enough, raise error
  1089. .LOOP1:
  1090.     CMP.L   A1,A0
  1091.     BPL     .EXIT
  1092.     moveq   #0,d0
  1093.  
  1094.     MOVE.B  (A0)+,D0
  1095.     BEQ     .EXIT
  1096.     CMP.b   #" ",D0
  1097.     BEQ     .LOOP1
  1098.     CMP.b   #10,D0
  1099.     BEQ     .LOOP1
  1100.     CMP.b   #9,D0
  1101.     BEQ     .LOOP1
  1102.     CMP.b   #"/",D0
  1103.     BEQ     .TRYCOM
  1104.     CMP.b   #"-",D0
  1105.     BEQ     .TRYCOM2
  1106.     CMP.b   #"P",D0
  1107.     BEQ     .PROC
  1108.     CMP.b   #"I",D0
  1109.     BEQ     .INLINE
  1110.     CMP.b   #"S",D0
  1111.     BEQ     .STARTUPCODE
  1112.     BRA     ERROR88
  1113. .EXIT:
  1114.     MOVEM.L (A7)+,D0-D7/A0-A6
  1115.     RTS
  1116.  
  1117. ;; parse /* */ //
  1118. .TRYCOM:
  1119.     CMP.B   #"/",(A0)
  1120.     BEQ     .SHORT
  1121.     CMP.B   #"*",(A0)
  1122.     BNE     ERROR88
  1123. .LOOP2:
  1124.     CMPA.L  A1,A0
  1125.     BPL     ERROR88
  1126.     CMP.B   #"*",(A0)+
  1127.     BNE     .LOOP2
  1128.     CMP.B   #"/",(A0)
  1129.     BNE     .LOOP2
  1130.     ADDQ.L  #1,A0
  1131.     BRA     .LOOP1
  1132. ;*-*
  1133. ;; parse ->
  1134. .TRYCOM2:
  1135.     CMP.B   #">",(A0)
  1136.     BEQ     .SHORT
  1137.     BRA     ERROR88
  1138. ;*-*
  1139. ;; do // ->
  1140. .SHORT:
  1141.     CMPA.L  A1,A0
  1142.     BPL     ERROR88
  1143.     CMP.B   #10,(A0)+
  1144.     BNE     .SHORT
  1145.     BRA     .LOOP1
  1146. ;*-*
  1147. ;; proc
  1148. .PROC:
  1149.     MOVE.L  A1,-(A7)
  1150.     LEA     .HEAVYTAB,A6
  1151.     cmp.b   #"R",(A0)+
  1152.     Bne     ERROR88
  1153.     cmp.b   #"O",(a0)+
  1154.     bne     ERROR88
  1155.     cmp.b   #"C",(a0)+
  1156.     BNE     ERROR88
  1157.  
  1158.     BSR .SKIPWHITE
  1159.  
  1160.     GETM    A4
  1161.     move.l  a4,a5           ; a5 = name
  1162.  
  1163.     move.b  (a0)+,D0
  1164.     MOVE.B  D0,(A4)+
  1165.     MOVE.B  (A6,D0),D0
  1166.     CMP.B   #2,D0
  1167.     BNE     ERROR88
  1168.  
  1169.  
  1170. .LP:
  1171.  
  1172.     MOVE.B  (A0)+,D0
  1173.     mOVE.b  D0,(a4)+
  1174.     TST.B   (A6,D0)
  1175.     BNE .LP
  1176.     subq.l  #1,a0
  1177.  
  1178.     MOVE.B  #0,-1(A4)       ; NULL-TERMINATED NAME OF COMMAND
  1179.     move.l  a4,d0
  1180.     btst    #0,d0
  1181.     beq     .LS1
  1182.     clr.b   (a4)+
  1183. .LS1:
  1184.     CLR.L   (A4)+
  1185.     move.l  a5,LIB_NAME(a4)        ;
  1186.  
  1187.     BSR LIBCHASH
  1188.  
  1189.     BSR .SKIPWHITE
  1190.  
  1191.     CMP.b   #"(",(A0)+
  1192.     BNE ERROR88
  1193.     MOVEQ   #0,D5           ; NO OF ARGS
  1194.  
  1195.     BSR .SKIPWHITE
  1196.  
  1197.     MOVEQ   #0,D0
  1198.  
  1199.     MOVE.B  (A0)+,D0
  1200.     CMP.B   #")",D0
  1201.     BEQ     .LX
  1202.     SUBQ.L  #1,A0
  1203.  
  1204. .NEXT:
  1205.     BSR .SKIPWHITE
  1206.     MOVE.L  A0,D2
  1207.     MOVE.B  (A0)+,D0
  1208.     TST.B   (A6,D0)
  1209.     BEQ     ERROR88
  1210.     ADDQ.L  #1,D5
  1211. .LP3:
  1212.     MOVE.B  (A0)+,D0
  1213.     TST.B   (A6,D0)
  1214.     BNE     .LP3
  1215.  
  1216.     subq.l  #1,a0
  1217.  
  1218.     BSR     .SKIPWHITE
  1219.     CMP.B   #",",(A0)+
  1220.     BEQ     .NEXT
  1221.     CMP.B   #":",-1(A0)
  1222.     BEQ .LY
  1223.     CMP.B   #")",-1(A0)
  1224.     BNE     ERROR88
  1225.     BRA .LX
  1226. .LY:
  1227.     LEA .STREAM(PC),A6
  1228.     BSR .CHECK
  1229.     NEG.L   D5
  1230.     bsr .SKIPWHITE
  1231.     CMP.B   #")",(A0)+
  1232.     BNE ERROR88
  1233.  
  1234. .LX:
  1235.     MOVE.W  D5,LIB_ARGS(A4)
  1236.     CLR.W   LIB_TYPE(A4)       ;type
  1237.     clr.l   LIB_CODE(a4)
  1238.     CLR.L   LIB_CLEN(A4)
  1239.     CLR.L   LIB_USED(A4)       ;code-rel/use
  1240.     CLR.W   LIB_CPU(A4)
  1241.     CLR.W   LIB_FPU(A4)
  1242.     CLR.W   LIB_MMU(A4)
  1243.     MOVE.W  #33,LIB_OSVERS(A4)
  1244.     BSR     .FINDCODE
  1245.     ADD.L   #LIB_SIZE,A4
  1246.     DONEM   A4
  1247.     MOVE.L  (A7)+,A1
  1248.     BRA     .LOOP1
  1249. ;*-*
  1250. ;; inline
  1251. .INLINE:
  1252.     MOVE.L  A1,-(A7)
  1253.     LEA .INL_NAME(PC),A6
  1254.     BSR .CHECK
  1255.     BSR .SKIPWHITE
  1256.  
  1257.     LEA .HEAVYTAB(PC),A6
  1258.  
  1259.     GETM    A4
  1260.     move.l  a4,a5           ; a5 = name
  1261.  
  1262.     move.b  (a0)+,D0
  1263.     MOVE.B  D0,(A4)+
  1264.     MOVE.B  (A6,D0),D0
  1265.     CMP.B   #2,D0
  1266.     BLT     ERROR88
  1267.  
  1268. ;    movem.l d0-a6,-(A7)
  1269. ;    move.l  a0,d2
  1270. ;    move.l  #6,d3
  1271. ;    jsr WRITECON
  1272. ;    movem.l (a7)+,d0-a6
  1273.  
  1274.  
  1275. .INL_LP:
  1276.  
  1277.     MOVE.B  (A0)+,D0
  1278.     mOVE.b  D0,(a4)+
  1279.     TST.B   (A6,D0)
  1280.     BNE .INL_LP
  1281.     subq.l  #1,a0
  1282.  
  1283.     MOVE.B  #0,-1(A4)       ; NULL-TERMINATED NAME OF COMMAND
  1284.     move.l  a4,d0
  1285.     btst    #0,d0
  1286.     beq     .INL_LS1
  1287.     clr.b   (a4)+
  1288. .INL_LS1:
  1289.     clr.l   (a4)+
  1290.     move.l  a5,LIB_NAME(a4)        ;
  1291.  
  1292.     BSR LIBCHASH
  1293.  
  1294.     BSR .SKIPWHITE
  1295.  
  1296.     CMP.b   #"(",(A0)+
  1297.     BNE ERROR88
  1298.     MOVEQ   #0,D5           ; NO OF ARGS
  1299.  
  1300.     BSR .SKIPWHITE
  1301.  
  1302.     MOVEQ   #0,D0
  1303.  
  1304.     MOVE.B  (A0)+,D0
  1305.     CMP.B   #")",D0
  1306.     BEQ     .INL_LX
  1307.     SUBQ.L  #1,A0
  1308.  
  1309. .INL_NEXT:
  1310.     BSR .SKIPWHITE
  1311.     MOVEQ   #0,D2
  1312.     MOVE.B  (A0)+,D0
  1313.     TST.B   (A6,D0)
  1314.     BEQ     ERROR88
  1315.     ADDQ.L  #1,D5
  1316. .INL_LP3:
  1317.     MOVE.B  (A0)+,D0
  1318.     TST.B   (A6,D0)
  1319.     BNE     .INL_LP3
  1320.  
  1321.     subq.l  #1,a0
  1322.  
  1323.     CMP.B   #":",(A0)+
  1324.     BNE     ERROR88
  1325.     MOVE.B  (A0)+,D0
  1326.     CMP.B   #"A",D0
  1327.     BNE     .INL_SKXX1
  1328.     ADDQ.L  #4,D2
  1329.     BRA     .INL_SKXX2
  1330. .INL_SKXX1:
  1331.     CMP.B   #"D",D0
  1332.     BNE     ERROR88
  1333. .INL_SKXX2:
  1334.     MOVE.B  (A0)+,D0
  1335.     CMP.B   #"0",D0
  1336.     BLT     ERROR88
  1337.     CMP.B   #"3",D0
  1338.     BGT     ERROR88
  1339.     SUB.L   #"0",D0
  1340.     AND.L   #3,d0
  1341.     add.b   d0,d2
  1342.     CMP.B   #3,d2
  1343.     beq     ERROR88
  1344.     move.b  d2,LIB_TARR-1(a4,d5); Dx/Ax reg, e.g. INLINE Whatever(what:D0,where,A0)
  1345.  
  1346.     BSR     .SKIPWHITE
  1347.  
  1348.     CMP.B   #",",(A0)+
  1349.     BEQ     .INL_NEXT
  1350.     CMP.B   #")",-1(A0)
  1351.     BNE     ERROR88
  1352.  
  1353. .INL_LX:
  1354.     MOVE.W  D5,LIB_ARGS(A4)
  1355.     MOVE.W  #1,LIB_TYPE(A4) ; type
  1356.     CLR.W   LIB_CPU(A4)
  1357.     CLR.W   LIB_FPU(A4)
  1358.     CLR.W   LIB_MMU(A4)
  1359.     mOVE.W  #33,LIB_OSVERS(A4)
  1360.     BSR     .FINDCODE
  1361.     CLR.L   LIB_USED(A4)    ;code-rel/use
  1362.  
  1363.     ADD.L   #LIB_SIZE,A4
  1364.     DONEM   A4
  1365.     MOVE.L  (A7)+,A1
  1366.     BRA     .LOOP1
  1367. ;*-*
  1368. ;; startup code
  1369. .STARTUPCODE:
  1370.     MOVE.L  A1,-(A7)
  1371.     LEA .STC_NAME(PC),A6
  1372.     BSR .CHECK
  1373.     BSR .SKIPWHITE
  1374.  
  1375.     LEA .HEAVYTAB(PC),A6
  1376.  
  1377.     GETM    A4
  1378.     move.l  a4,a5           ; a5 = name
  1379.  
  1380.     move.b  (a0)+,D0
  1381.     MOVE.B  D0,(A4)+
  1382.     MOVE.B  (A6,D0),D0
  1383.     CMP.B   #2,D0           ; only capital letters..
  1384.     BNE     ERROR88
  1385.  
  1386. .STC_LP:
  1387.  
  1388.     MOVE.B  (A0)+,D0
  1389.     mOVE.b  D0,(a4)+
  1390.     CMP.B   #2,(A6,D0)      ; CAPITAL LETTERS ONLY
  1391.     BEQ .STC_LP
  1392.     subq.l  #1,a0
  1393.  
  1394.     MOVE.B  #0,-1(A4)       ; NULL-TERMINATED NAME OF CODE
  1395.     move.l  a4,d0
  1396.     btst    #0,d0
  1397.     beq     .STC_LS1
  1398.     clr.b   (a4)+
  1399. .STC_LS1:
  1400.     move.l  LIBLIST(PC),(A4)+
  1401.     move.l  A4,LIBLIST
  1402.     move.l  a5,LIB_NAME(a4)        ;
  1403.  
  1404.     BSR .SKIPWHITE
  1405.  
  1406.     MOVE.W  #0,LIB_ARGS(A4)
  1407.     MOVE.W  #2,LIB_TYPE(A4) ; type
  1408.     BSR     .FINDCODE
  1409.  
  1410.     ADD.L   #LIB_SIZE,A4
  1411.     DONEM   A4
  1412.     MOVE.L  (A7)+,A1
  1413.     BRA     .LOOP1
  1414. ;*-*
  1415.  
  1416. ;; Check
  1417. ; A0 - src
  1418. ; A6 - dest
  1419. .CHECK:
  1420.     CMPM.B  (A0)+,(A6)+
  1421.     BEQ     .CHECK
  1422.     TST.B   -1(A6)
  1423.     BNE     ERROR88
  1424.     sUBQ.L  #1,A0
  1425.     CMP.B   #32,(A0)
  1426.     BEQ     .CHX
  1427.     CMP.B   #")",(A0)
  1428.     BEQ     .CHX
  1429.     CMP.B   #9,(A0)
  1430.     BNE     ERROR88
  1431. .CHX:
  1432.     RTS
  1433. ;*-*
  1434. ;; SKIP WHITESPACES
  1435. .SKIPWHITE
  1436.     cmp.b   #" ",(a0)+
  1437.     beq     .SKIPWHITE
  1438.     cmp.b   #9,-1(a0)
  1439.     beq     .SKIPWHITE
  1440.     SUBQ.L  #1,A0
  1441.     RTS
  1442. ;*-*
  1443.  
  1444. .HEAVYTAB:
  1445.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1446.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1447.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1448.     DC.B    1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0
  1449.     DC.B    1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ; -O
  1450.     DC.B    2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2 ; -_
  1451.     DC.B    0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ; -o
  1452.     DC.B    3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0 ; -DEL
  1453.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1454.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1455.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1456.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1457.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1458.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1459.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1460.     DC.B    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1461.  
  1462. .INL_NAME:
  1463.     DC.B    'NLINE',0
  1464. .STC_NAME:
  1465.     DC.B    'TARTUP',0
  1466. .STREAM:
  1467.     DC.B    'STREAM',0
  1468.     EVEN
  1469.  
  1470. ;; code
  1471. ;; FindCode
  1472. .FINDCODE
  1473.     MOVEM.L D0-D7/A0-A1/A4-A6,-(A7)
  1474.     CMPA.L  A3,A2       ; check if enough code
  1475.     BPL     ERROR28     ;
  1476.  
  1477.     cmp.l   #$3e7,(a2)  ; we're doing a link object
  1478.     bne     ERROR28     ; !
  1479. .LC1:
  1480.     CMPA.L  A3,A2
  1481.     BPL     ERROR28     ; file truncated?
  1482.  
  1483.     MOVe.L  (A2)+,D0
  1484.     CMP.L   #$3F2,D0
  1485.     BEQ     .X
  1486.  
  1487.     MOVe.L  (A2)+,D1    ; size of hunk/whatever
  1488.  
  1489.     sub.l   #$3e7,d0
  1490.     lsl.w   #2,d0
  1491.     move.l  .TABLE(PC,d0),A0
  1492.     JSR     (a0)
  1493.     bra     .LC1
  1494. .X: MOVEM.L (A7)+,D0-D7/A0-A1/a4-A6
  1495.     RTS
  1496. ;*-*
  1497. .TABLE:
  1498.     DC.L    .SKIP, .SKIP, .CODE, .ERRR, .ERRR, .RELO, .ERRR, .ERRR
  1499.     DC.L    .XTNS, .ERRR, .SKIP, .ERRR, .ERRR, .ERRR, .ERRR, .ERRR
  1500.     DC.L    .ERRR, .ERRR, .ERRR, .ERRR, .ERRR, .ERRR, .ERRR, .ERRR
  1501. .CURRENT:
  1502.     DC.L    0
  1503. ;; code
  1504. .CODE:
  1505.     LSL.L   #2,D1
  1506.     MOVE.L  D1,LIB_CLEN(A4)
  1507.     MOVE.L  A2,LIB_CODE(A4)
  1508.     CLR.L   LIB_RELO(A4)
  1509.     ADD.L   D1,A2
  1510.     RTS
  1511. ;*-*
  1512. ;; skip
  1513. .SKIP:
  1514.     LSL.L   #2,D1
  1515.     ADD.L   D1,A2
  1516.     rTS
  1517. ;*-*
  1518. ;; extn
  1519. .XTNS:
  1520.     MOVE.L  A2,LIB_XTNS(A4)
  1521.     SUB.L   #4,LIB_XTNS(A4)
  1522. .EXTN:
  1523.     MOVE.L  d1,d2
  1524.     beq .XIT
  1525.  
  1526.     MOVE.L  A2,A5
  1527.     LOWER A2,D0
  1528.     MOVe.L  A5,A2
  1529.  
  1530.     rol.l   #8,d2
  1531.     and.l   #$FF,D2
  1532.     and.l   #$FFFFFF,d1
  1533.     cmp.w   #$83,d2
  1534.     beq     .0x83
  1535.     cmp.w   #$02,d2
  1536.     beq     .0x02
  1537. .EXT_1:
  1538.     lsl.l   #2,d1
  1539.     add.l   d1,a2
  1540.     move.l  (a2)+,d1
  1541.     cmp.w   #$80,d2
  1542.     bmi .EXT_2
  1543.     lsl.l   #2,d1
  1544.     add.l   d1,a2
  1545. .EXT_2:
  1546.     move.l  (a2)+,d1
  1547.     bra .EXTN
  1548. .XIT:
  1549.     rts
  1550. ;*-*
  1551. ;; errr
  1552. .ERRR:
  1553.     BRA ERROR28
  1554. ;*-*
  1555. ;; relo
  1556. .RELO:
  1557.     SUBQ.L  #8,A2       ;also reloc type!
  1558.     MOVE.L  A2,LIB_RELO(A4)
  1559.     addq.l  #2,d1
  1560.     LSL.L   #2,D1
  1561.     ADD.L   D1,A2
  1562.     addq.l  #8,a2       ; hunk 1 hunk 0
  1563.  
  1564.     rTS
  1565. ;*-*
  1566.  
  1567. ;; 0xXX
  1568. ;; 0x83:
  1569. .0x83:
  1570.     MOVE.L  A5,A2       ; dos base
  1571.     MOVEQ   #-44,D3
  1572.     LEA .DBASE,A6
  1573.     BSR .CHECK2
  1574.     BEQ .0x83_FILL
  1575.  
  1576.     MOVEQ   #-48,D3     ; intuition base
  1577.     MOVE.L  A5,A2
  1578.     LEA .IBASE,A6
  1579.     BSR .CHECK2
  1580.     BEQ .0x83_FILL
  1581.  
  1582.     MOVEQ   #-52,d3     ; gfx base
  1583.     MOVE.L  A5,A2
  1584.     LEA .GBASE,A6
  1585.     BSR .CHECK2
  1586.     BEQ .0x83_FILL
  1587.  
  1588.     MOVEQ   #-8,d3      ; stdout
  1589.     MOVE.L  A5,A2
  1590.     LEA .SOUT,A6
  1591.     BSR .CHECK2
  1592.     BEQ .0x83_FILL
  1593.  
  1594.     MOVEQ   #-16,d3     ; stdrast
  1595.     MOVE.L  A5,A2
  1596.     LEA .SRAST,A6
  1597.     BSR .CHECK2
  1598.     BEQ .0x83_FILL
  1599.  
  1600.     MOVEQ   #-32,d3     ; arg
  1601.     MOVE.L  A5,A2
  1602.     LEA .ARG,A6
  1603.     BSR .CHECK2
  1604.     BEQ .0x83_FILL
  1605.  
  1606.     MOVEQ   #-36,d3     ; wbmessage
  1607.     MOVE.L  A5,A2
  1608.     LEA .WBMSG,A6
  1609.     BSR .CHECK2
  1610.     BEQ .0x83_FILL
  1611.  
  1612.     MOVEQ   #-56,D3     ; mathieeesingbas base
  1613.     MOVE.L  A5,A2
  1614.     LEA .SBBASE,A6
  1615.     BSR .CHECK2
  1616.     BNE .0x83_skp1
  1617.     BSET    #3,CODEPREFS+1
  1618.     BRA .0x83_FILL
  1619. .0x83_skp1:
  1620.     MOVEQ   #-60,D3     ; mathieeesingtrans base
  1621.     MOVE.L  A5,A2
  1622.     LEA .STBASE,A6
  1623.     BSR .CHECK2
  1624.     BNE .0x83_skp2
  1625.     BSET    #4,CODEPREFS+1
  1626.     BRA .0x83_FILL
  1627. .0x83_skp2:
  1628.     MOVE.L  #-84,D3     ; exception
  1629.     MOVE.L  A5,A2
  1630.     LEA .XCP,A6
  1631.     BSR .CHECK2
  1632.     BEQ .0x83_FILL
  1633.  
  1634.     MOVE.L  #-96,D3     ; exceptioninfo
  1635.     MOVE.L  A5,A2
  1636.     LEA .XCPI,A6
  1637.     BSR .CHECK2
  1638.     BEQ .0x83_FILL
  1639.  
  1640.     MOVE.L  #-92,D3     ; stdin
  1641.     MOVE.L  A5,A2
  1642.     LEA .SIN,A6
  1643.     BSR .CHECK2
  1644.     BEQ .0x83_FILL
  1645.  
  1646.     MOVE.L  #-120,D3    ; pool
  1647.     MOVE.L  A5,A2
  1648.     LEA .POOL,A6
  1649.     BSR .CHECK2
  1650.     BNE .0x83_skp3
  1651.     BSET    #6,CODEPREFS
  1652.     BRA .0x83_FILL
  1653. .0x83_skp3:
  1654.     MOVE.L  #-124,D3    ; utillib
  1655.     MOVE.L  A5,A2
  1656.     LEA .UBASE,A6
  1657.     BSR .CHECK2
  1658.     BNE .0x83_skp4
  1659.     BSET    #7,CODEPREFS
  1660.     BRA .0x83_FILL
  1661. .0x83_skp4:
  1662.     CMP.W   #2,LIB_TYPE(A4)
  1663.     BEQ .0x83_skp5      ; startup code - additional fields below
  1664.     BRA ERROR28
  1665. .0x83_skp5:
  1666.     MOVE.L  #0,D3
  1667.     BRA .0x83_FILL
  1668.  
  1669. ;; Fill
  1670. .0x83_FILL:
  1671.     MOVE.L  A5,A2
  1672.     LSL.L   #2,D1
  1673.     ADD.L   D1,A2
  1674.     MOVE.L  (A2)+,D1
  1675.     SUBQ.L  #1,D1
  1676.     MOVE.L  LIB_CODE(A4),A6
  1677. .0x83_DBLOOP:
  1678.     MOVE.L  (A2)+,D0
  1679.     MOVE.W  D3,(A6,D0.L)
  1680.     DBF D1,.0x83_DBLOOP
  1681.     MOVE.L  (A2)+,D1
  1682.     BRA .EXTN
  1683. ;*-*
  1684. ;*-*
  1685. ;; 0x02:
  1686. .0x02:
  1687.     MOVE.L  #LIB_CPU,D2
  1688.     MOVE.L  A5,A2       ; cpu
  1689.     MOVEQ   #-44,D3
  1690.     LEA .CPU,A6
  1691.     BSR .CHECK2
  1692.     BEQ .0x02_FILL
  1693.  
  1694.     MOVE.L  #LIB_FPU,D2
  1695.     MOVE.L  A5,A2       ; fpu
  1696.     MOVEQ   #-44,D3
  1697.     LEA .FPU,A6
  1698.     BSR .CHECK2
  1699.     BEQ .0x02_FILL
  1700.  
  1701.     MOVE.L  #LIB_MMU,D2
  1702.     MOVE.L  A5,A2       ; mmu
  1703.     MOVEQ   #-44,D3
  1704.     LEA .MMU,A6
  1705.     BSR .CHECK2
  1706.     BEQ .0x02_FILL
  1707.  
  1708.     MOVE.L  #LIB_OSVERS,D2
  1709.     MOVE.L  A5,A2       ; osversion
  1710.     MOVEQ   #-44,D3
  1711.     LEA .OSV,A6
  1712.     BSR .CHECK2
  1713.     BEQ .0x02_FILL
  1714.  
  1715.     BRA ERROR22
  1716. ;; sub codes
  1717. .0x02_FILL:
  1718.     lsl.l   #2,d1
  1719.     move.l  a5,a2
  1720.     add.l   d1,a2
  1721.     move.l  (a2)+,d3
  1722.     cmp.l   #LIB_CPU,D2
  1723.     beq .A
  1724.     cmp.l   #LIB_FPU,d2
  1725.     beq .B_
  1726.     cmp.l   #LIB_MMU,D2
  1727.     beq .C
  1728.     move.w  D3,(A4,D2)
  1729. ._EXIT:
  1730.     move.l  (a2)+,d1
  1731.     bra .EXTN
  1732. ;; cpu
  1733. .A:
  1734.     CMP.L   #$68000,d3
  1735.     bpl     .A1
  1736.     cmp.l   #$10,d3
  1737.     bpl     .A2
  1738.     MULU.W  #20,D3
  1739.     MOVE.W  D3,(A4,D2)
  1740.     BRA ._EXIT
  1741. .A2:
  1742.     MOVE.W  D3,(A4,D2)
  1743.     BRA ._EXIT
  1744. .A1:
  1745.     SUB.L   #$68000,D3
  1746.     MOVE.W  D3,(A4,D2)
  1747.     BRA ._EXIT
  1748. ;*-*
  1749. ;; fpu
  1750. .B_:
  1751.     cMP.l   #$68000,d3
  1752.     bpl .B1
  1753.     cmp.l   #$040,d3
  1754.     bpl .B2
  1755.     move.w  d3,(A4,D2)
  1756.     bra ._EXIT
  1757. .B1:
  1758.     cmp.l   #$68881,d3
  1759.     bpl .B11
  1760.     move.w  #2,(a4,d2)
  1761.     bra ._EXIT
  1762. .B11:
  1763.     move.w  #1,(a4,d2)
  1764.     bra ._EXIT
  1765. .B2:
  1766.     cmp.l   #$881,d3
  1767.     bpl .B21
  1768.     move.w  #2,(a4,d2)
  1769.     bra ._EXIT
  1770. .B21:
  1771.     move.w  #1,(a4,d2)
  1772.     bra ._EXIT
  1773. ;*-*
  1774. ;; mmu
  1775. .C:
  1776.     cmp.l   #$68851,d3
  1777.     beq .C1
  1778.     move.w  #2,(a4,d2)
  1779.     bra ._EXIT
  1780. .C1:
  1781.     move.w  #1,(a4,d2)
  1782.     bra ._EXIT
  1783. ;*-*
  1784. ;*-*
  1785. ;*-*
  1786. ;; Check2
  1787. ; A2 - src
  1788. ; A6 - dest
  1789. .CHECK2:
  1790.     MOVEQ   #1,D0
  1791.     CMPM.B  (A2)+,(A6)+
  1792.     BNE     .CH2X
  1793.     TST.B   -1(A2)
  1794.     BNE .CHECK2
  1795.  
  1796.     BNE     .CH2X
  1797.     MOVEQ   #0,D0
  1798. .CH2X:
  1799.     TST.L   D0
  1800.     RTS
  1801. ;*-*
  1802. ;; 0x83 names
  1803. .DBASE:
  1804.     DC.B    '_dosbase',0
  1805. .IBASE:
  1806.     DC.B    '_intuitionbase',0
  1807. .GBASE:
  1808.     DC.B    '_gfxbase',0
  1809. .SOUT:
  1810.     DC.B    '_stdout',0
  1811. .SRAST:
  1812.     DC.B    '_stdrast',0
  1813. .ARG:
  1814.     DC.B    '_arg',0
  1815. .WBMSG:
  1816.     DC.B    '_wbmessage',0
  1817. .SBBASE:
  1818.     DC.B    '_mathieeesingbasbase',0
  1819. .STBASE:
  1820.     DC.B    '_mathieeesingtransbase',0
  1821. .XCP:
  1822.     DC.B    '_exception',0
  1823. .XCPI:
  1824.     Dc.B    '_exceptioninfo',0
  1825. .SIN:
  1826.     DC.B    '_stdin',0
  1827. .UBASE:
  1828.     DC.B    '_utilitybase',0
  1829. .POOL:
  1830.     DC.B    '_pool',0
  1831.  
  1832.     EVEN
  1833. ;*-*
  1834. ;; 0x02 names
  1835. .CPU:
  1836.     DC.B    '__cpu',0
  1837. .FPU:
  1838.     DC.B    '__fpu',0
  1839. .MMU:
  1840.     DC.B    '__mmu',0
  1841. .OSV:
  1842.     DC.B    '__osversion',0
  1843. ;*-*
  1844. ;*-*
  1845. ;*-*
  1846. ;; hash
  1847. LIBCHASH:
  1848.     MOVEM.L D0-A6,-(A7)
  1849.     MOVE.L  #LIBHASH,A0     ; A0=TABLE
  1850.     HASH    A5,D0,D1
  1851.     LSL.L   #2,D0
  1852.     LEA     0(A0,D0.L),A2
  1853.     MOVE.L  (A2),LIB_NEXT(A4)     ; READ PREVIOUS LIST (OR NIL)
  1854.     MOVE.L  A4,(A2)         ; PUT ENTRY IN LIST
  1855.     MOVEM.L (A7)+,D0-A6
  1856.     RTS
  1857. ;*-*
  1858. LIBLIST:
  1859.     DC.L    0
  1860.  
  1861. ;*-*
  1862. ;HEADER
  1863. ;; Exec
  1864. ; ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;
  1865. ;   The InitCode and ExitCode Part ....                         ;
  1866. ; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
  1867.  
  1868.  
  1869. STACKPOKE:        DC.L    0,0
  1870. AFTERDELEGATESLEA:    DC.L    0
  1871. BEFORESECONDLEA:      DC.L    0
  1872. TOTALDELSIZE:     DC.L    0
  1873.  
  1874. BUILDDELEGATECONSTRUCTORS:
  1875.     MOVE.L  CURACODE,A4     ; A4=CODE
  1876.     MOVEQ   #6,D0
  1877.     JSR ADDLABEL
  1878.  
  1879.     LEA OLIST+4,A5      ; A5=OLIST
  1880.     MOVEQ   #1,D6           ; D6=NUM
  1881. .CO:    MOVE.L  -(A5),D0
  1882.     BEQ.S   .COX
  1883.     MOVE.L  D0,A5
  1884.     TST.W   ODEL(A5)
  1885.     BEQ.S   .CO
  1886.     ADDQ.L  #1,D6
  1887.     BRA.S   .CO
  1888. .COX:   LSL.L   #2,D6
  1889.     MOVEQ   #4,D4           ; D4=CUR_DEL_PTR_OFF
  1890.  
  1891.     LEA OLIST+4,A5      ; A5=OLIST
  1892. .XL:MOVE.L  -(A5),D0
  1893.     BEQ.W   .X
  1894.     MOVE.L  D0,A5
  1895.     MOVE.W  ODEL(A5),D7     ; D7=DELSIZE
  1896.     BEQ.S   .XL
  1897.  
  1898.     GETM    A1
  1899.     MOVE.L  .GET(PC),(A4)+
  1900.     MOVE.L  D6,(A4)+
  1901.     MOVE.W  .GET2(PC),(A4)+
  1902.     MOVE.L  OACC(A5),(A1)       ; ADD TO ACCESSLIST OF THIS OBJECT
  1903.     MOVE.L  A1,OACC(A5)
  1904.     ADDQ.L  #4,A1
  1905.     MOVE.L  A4,(A1)+
  1906.     CLR.W   (A1)+
  1907.     DONEM   A1
  1908.     CLR.W   (A4)+
  1909.  
  1910.     EXT.L   D7
  1911.     MOVE.L  ODCODE(A5),A3       ; A3=CODE
  1912.     MOVE.L  A3,D0
  1913.     BEQ ERROR50
  1914.  
  1915.     MOVE.L  A3,D0
  1916.     SUB.L   A4,D0
  1917.     CMP.L   #-32000,D0
  1918.     BMI .LL
  1919.     SUBQ.L  #2,D0
  1920.     MOVE.W  .BSR(PC),(A4)+
  1921.     MOVE.W  D0,(A4)+
  1922.     BRA.S   .LD
  1923. .LL:    ADD.L   A4,D0
  1924.     SUB.L   ACODE,D0
  1925.     MOVE.W  .JSR(PC),(A4)+
  1926.     MOVE.L  D0,D1
  1927.     MOVE.L  A4,D0
  1928.     JSR ADDDIVRELOC
  1929.     MOVE.L  D1,(A4)+
  1930. .LD:
  1931.     BSR .ACC
  1932.     ADD.L   D7,D6
  1933.     ADDQ.L  #4,D4
  1934.     BRA.W   .XL
  1935. .X: SUBQ.L  #4,D6
  1936.     MOVE.L  D6,TOTALDELSIZE
  1937.     BSR MATHINITETC
  1938.     MOVE.W  .RTS(PC),(A4)+
  1939.     MOVE.L  A4,CURACODE
  1940.     JSR CHECK3
  1941. .RTS:   RTS
  1942. .BSR:   BSR .X
  1943. .JSR:   JSR .X
  1944. .GET:   MOVE.L  A4,A0
  1945.     ADD.L   #1,A0
  1946. .GET2:  MOVE.L  A0,4(A4)
  1947.  
  1948. .ACC:   LEA OACC(A5),A3
  1949.     MOVE.L  ODCODE(A5),D5
  1950.     SUB.L   ACODE,D5
  1951. .AL:    MOVE.L  (A3),D0
  1952.     BEQ.S   .AX
  1953.     MOVE.L  D0,A3
  1954.     MOVE.L  4(A3),A2
  1955.     MOVE.W  8(A3),D0
  1956.     BNE.S   .AA
  1957.     MOVE.W  D4,(A2)
  1958.     BRA.S   .AN
  1959. .AA:    MOVE.L  D5,(A2)
  1960.     MOVE.L  A2,D0
  1961.     BSR ADDDIVRELOC
  1962. .AN:    BRA.S   .AL
  1963. .AX:    RTS
  1964.  
  1965.  
  1966. MAKEEXITCODE:
  1967.     MOVE.W  #11,CURSPOT
  1968.     BTST    #3,CODEPREFS+3
  1969.     BNE .EX
  1970.     TSTMOD
  1971.     BNE .EX
  1972.     BTST    #5,CODEPREFS
  1973.     BNE .EX
  1974.     BTST    #2,CODEPREFS
  1975.     BNE     OTHEREXITCODE
  1976.     BSR BUILDDELEGATECONSTRUCTORS
  1977.     BSR BUILDLIBFUNS
  1978.     MOVE.L  TOTALDELSIZE(PC),D1 ; PATCH DELSIZE
  1979.     MOVE.L  D1,D2
  1980.     MOVE.L  BEFORESECONDLEA(PC),D0
  1981.     BEQ.S   .1
  1982.     MOVE.L  D0,A0
  1983.     MOVE.L  D2,2(A0)
  1984. .1: NEG.L   D2
  1985.     MOVE.L  AFTERDELEGATESLEA(PC),A0
  1986.     MOVE.L  D2,-4(A0)
  1987.     MOVE.L  MINSTACK,D0         ; GLOBAL + ALL_LOCAL + DELEGATES
  1988.     ADD.L   GLOBSTACK,D0
  1989.     ADD.L   D1,D0
  1990.     MOVE.L  CODESTACK,D1
  1991.     BNE.S   .S
  1992.     ADD.L   #MINSTACKSIZE,D0
  1993.     MOVE.L  LIBINFO,D1
  1994.     BEQ.S   .NL
  1995.     SUB.L   #MINSTACKSIZE-MINSTACKSIZELIB,D0
  1996. .NL:    MOVE.L  D0,CODESTACK
  1997.     BSET    #0,CODEPREFS+3
  1998.     BRA.S   .NS
  1999. .S: CMP.L   D0,D1
  2000.     BPL.S   .S2
  2001.     BSET    #2,WARNINGS+3
  2002. .S2:    ADD.L   #4000,D0
  2003.     CMP.L   D0,D1
  2004.     BPL.S   .S3
  2005.     BSET    #1,WARNINGS+3
  2006.     BCLR    #2,WARNINGS+3
  2007. .S3:
  2008. .NS:    MOVE.L  CODESTACK,D0
  2009.     LEA STACKPOKE(PC),A0
  2010.     MOVE.L  (A0)+,A1
  2011.     MOVE.L  D0,(A1)
  2012.     MOVE.L  (A0),A1
  2013.     MOVE.L  D0,(A1)
  2014. .EX:    RTS
  2015.  
  2016.  
  2017.  
  2018. MAKEINITCODE:
  2019.     MOVE.W  #3,CURSPOT
  2020.     MOVE.L  CURACODE,A4
  2021.  
  2022.     GETM    A0                  ; fill the 0-hunk structure!
  2023.     clr.l   (a0)+               ; next
  2024.     MOVE.L  A0,HunkList         ;
  2025.     MOVE.L  A4,(A0)+            ; start
  2026.     MOVE.L  #$3e9,(A0)+         ; type
  2027.     clr.l   (a0)+               ; end
  2028.     clr.l   (a0)+               ; prev
  2029.     clr.l   (a0)+               ; reloc
  2030.     DONEM   A0                  ; We'll use it for writing the stuff :)
  2031.  
  2032.     BTST    #3,CODEPREFS+3
  2033.     BNE .EX
  2034.     TSTMOD
  2035.     BNE .EX
  2036.     BTST    #5,CODEPREFS
  2037.     BNE .EX
  2038.     BTST    #2,CODEPREFS
  2039.     BNE OTHERINITCODE
  2040.     TST.L   LIBINFO
  2041.     BNE LMAKEINITCODE
  2042.     BTST    #4,CODEPREFS
  2043.     BNE NSMAKEINITCODE
  2044.  
  2045.     BTST    #4,ICODEPREFS+3
  2046.     BEQ     .nobg
  2047.     BSR BGCODE
  2048. .nobg:
  2049.     LEA FIRSTSTART(PC),A0   ; NEW STACK
  2050.     MOVE.L  (A0)+,(A4)+
  2051.     MOVE.L  (A0)+,(A4)+
  2052.     MOVE.W  (A0)+,(A4)+
  2053.     MOVE.L  A4,STACKPOKE
  2054.     ADDQ.L  #4,A4
  2055.     ADDQ.L  #4,A0
  2056.     MOVE.L  #LINKC2,D0
  2057.     BSR COPYC
  2058.     MOVE.L  A4,AFTERDELEGATESLEA    ; PATCH IN SIZE LATER
  2059.     MOVE.W  LINKC2(PC),(A4)+
  2060.     MOVE.W  NRGLOB,D7
  2061.     MOVE.W  D7,(A4)+
  2062.     LEA REALSTART(PC),A0
  2063.     MOVE.L  A4,A6           ; BACKUP
  2064.     MOVE.L  #MIDC,D0
  2065.     BSR COPYC
  2066.     LEA POKESTRING-REALSTART(A6),A6
  2067.     MOVE.L  ARGBYTE,A5
  2068.     BTST    #0,(A5)
  2069.     BNE.S   .ARGU
  2070.     MOVE.L  #$4E714E71,(A6)
  2071.     MOVE.W  #$4E71,4(A6)
  2072. .ARGU:
  2073. ;    BTST    #0,CODEPREFS+2
  2074. ;    BEQ.S   .NVERS
  2075. ;    MOVE.W  OSVERSION,D0
  2076. ;    MOVE.B  D0,POKE37-POKESTRING+1(A6)
  2077. .NVERS: MOVE.W  GLOBJUMP(PC),(A4)+
  2078.     MOVEQ   #5,D0
  2079.     JSR ADDBRANCHRELOC
  2080.     MOVE.W  EXITC(PC),(A4)+     ; DELEGATES
  2081.     MOVEQ   #8,D0
  2082.     JSR ADDBRANCHRELOC
  2083.     LEA EXITC2(PC),A0
  2084.     MOVE.L  #ENDC2,D0
  2085.     BSR COPYC
  2086.     LEA ENDC2(PC),A0
  2087.     MOVE.L  A4,BEFORESECONDLEA
  2088.     MOVE.L  (A0)+,(A4)+
  2089.     MOVE.L  (A0)+,(A4)+
  2090.     MOVE.L  A4,STACKPOKE+4
  2091.     ADDQ.L  #4,A4
  2092.     ADDQ.L  #4,A0
  2093.     MOVE.L  #ST2,D0
  2094.     BSR COPYC
  2095.     MOVE.L  ST2,(A4)+
  2096.  
  2097.  
  2098.     TST.L   bgName
  2099.     BEQ     .MICX
  2100.     MOVE.L  bgName(PC),A0
  2101. .MICC:
  2102.     MOVE.B  (A0)+,(A4)+
  2103.     BNE .MICC
  2104.     MOVE.L  A4,D0
  2105.     BTST    #0,D0
  2106.     BEQ     .MICX
  2107.     CLR.B   (A4)+
  2108. .MICX:
  2109.     BSR FIXPROCCODE
  2110.     MOVE.L  A4,CURACODE
  2111. .EX:    RTS
  2112.  
  2113. MAINRTS:    RTS
  2114.  
  2115.  
  2116.  
  2117.  
  2118. FIRSTSTART:           ; CHANGES ALSO TO LFIRSTART!!!
  2119.     MOVE.L  4.W,A6
  2120.     MOVE.L  A0,A5           ; SAVE A0/D0 TO A5/D7
  2121.     MOVE.L  D0,D7
  2122.     MOVE.L  #20000,D0       ; THIS .L IS CHANGED!
  2123.     MOVE.L  #$10000,D1
  2124.     MOVE.L  D0,D2
  2125.     JSR -198(A6)
  2126.     TST.L   D0
  2127.     BNE.S   EXE_1
  2128.     MOVEQ   #20,D0
  2129.     RTS
  2130. A4STORAGE_EXE:
  2131.     DC.L    0
  2132. EXE_1:
  2133.     MOVE.L  D0,D6           ; D6=BOTTOMSTACK
  2134.     ADD.L   D2,D0
  2135.     JSR -132(A6)        ; --> FORBID
  2136.     EXG.L   D0,A7
  2137.     MOVE.L  D0,-(A7)
  2138.     ADD.L   #1,A7           ; SIZE IS PATCHED IN
  2139. LINKC2:
  2140.     LINK    A4,#-4
  2141. REALSTART:
  2142.     JSR -138(A6)        ; --> PERMIT
  2143.  
  2144.     MOVE.L  D6,-64(A4)
  2145.     SUBA.L  A1,A1       ; check for wbstartup
  2146.     JSR -294(A6)        ; findtasK
  2147.     MOVE.L  D0,A3
  2148.     TST.L   172(A3)
  2149.     BNE.S   NOWBST
  2150.     LEA 92(A3),A0
  2151.     JSR -384(A6)        ; waitport
  2152.     LEA 92(A3),A0
  2153.     JSR -372(A6)        ; getmsg
  2154.     MOVE.L  D0,-36(A4)
  2155.     LEA ZEROSPOT(PC),A0
  2156.     MOVE.L  A0,-32(A4)      ; WB=NO ARGS
  2157.     BRA.S   NOARGSET
  2158. NOWBST:
  2159.     MOVE.L  A5,A0
  2160.     MOVE.L  D7,D0
  2161.     MOVE.L  A0,-32(A4)
  2162. POKESTRING:
  2163.     MOVE.B  #0,-1(A0,D0.W)
  2164. NOARGSET:
  2165.     MOVE.L  A6,-40(A4)      ; INIT VARS
  2166.     LEA EXITC(PC),A0
  2167.     MOVE.L  A0,-24(A4)
  2168.  
  2169.     LEA INITINTUI(PC),A1    ; OPEN LIBS
  2170. POKE37:
  2171.     MOVEQ   #33,D0          ; OR V37!
  2172.     JSR -552(A6)
  2173.     MOVE.L  D0,-48(A4)
  2174.     BEQ CLINT
  2175.  
  2176.     LEA INITGFX(PC),A1
  2177.     MOVEQ   #33,D0
  2178.     JSR -552(A6)
  2179.     MOVE.L  D0,-52(A4)
  2180.     BEQ CLGFX
  2181.  
  2182.     LEA INITDOS(PC),A1
  2183.     MOVEQ   #33,D0          ; WE WILL USE FUNCTIONS NOT IN V32
  2184.     JSR -552(A6)
  2185.     MOVE.L  D0,-44(A4)
  2186.     BEQ CLDOS
  2187.  
  2188.     MOVE.L  D0,A6
  2189.     JSR -60(A6)         ; GET STDOUT, MAY BE 0
  2190.     MOVE.L  D0,-8(A4)
  2191.     JSR -54(A6)         ; GET STDIN
  2192.     MOVE.L  D0,-92(A4)
  2193.     MOVE.L  A7,-4(A4)
  2194.     LEA     A4STORAGE_EXE(PC),A1
  2195.     MOVE.L  A4,(A1)
  2196.     BRA.S   GLOBJUMP
  2197. INITDOS:      DC.B    "dos.library",0
  2198. INITINTUI:    DC.B    "intuition.library",0
  2199. INITGFX:      DC.B    "graphics.library",0
  2200. ZEROSPOT:     DC.B    0
  2201.     EVEN
  2202. MIDC:
  2203. GLOBJUMP:
  2204.     JSR GLOBJUMP
  2205. EXITC:
  2206.     JSR EXITC
  2207. EXITC2:
  2208.     MOVE.L  -4(A4),A7
  2209.     MOVE.L  4.W,A6
  2210.     MOVE.L  -20(A4),A2      ; CLEANUP MEMORY
  2211.     MOVE.L  A2,D0
  2212.     BEQ.S   .3
  2213. .4: MOVE.L  A2,A1
  2214.     MOVE.L  4(A2),D0
  2215.     MOVE.L  (A2),A2
  2216.     JSR -210(A6)
  2217.     MOVE.L  A2,D0
  2218.     BNE.S   .4
  2219. .3:
  2220.     MOVE.L  -44(A4),A1
  2221.     JSR -414(A6)        ; closedos
  2222. CLDOS:  MOVE.L  -52(A4),A1
  2223.     JSR -414(A6)        ; closegfx
  2224. CLGFX:  MOVE.L  -48(A4),A1
  2225.     JSR -414(A6)        ; closeintui
  2226. CLINT:  MOVE.L  -36(A4),D3
  2227.     BEQ.S   .1
  2228.     JSR -132(A6)        ; no unloadseg until we're done
  2229.     MOVE.L  D3,A1
  2230.     JSR -378(A6)        ; reply WB message
  2231. .1: MOVE.L  -28(A4),D2      ; EXITCODE
  2232.     UNLK    A4
  2233. ENDC2:
  2234.     ADD.L   #1,A7
  2235.     MOVE.L  #$20000,D0
  2236.     MOVE.L  (A7)+,A1
  2237.     EXG.L   A1,A7
  2238.     SUBA.L  D0,A1
  2239.     JSR -210(A6)
  2240. ST2:
  2241.     MOVE.L  D2,D0
  2242.     RTS
  2243. ENDC:
  2244. ;*-*
  2245. ;; library
  2246. ; sample.library
  2247.  
  2248. VERSION         = 37
  2249. REVISION        = 1
  2250.  
  2251. LIBB_DELEXP     = 3
  2252. LIB_NEGSIZE     = $10
  2253. LIB_POSSIZE     = $12
  2254. LIB_OPENCNT     = $20
  2255.  
  2256. TASKTABSIZE     = 16
  2257. NUMTASKTAB      = 8
  2258. NUMTASKS        = TASKTABSIZE*NUMTASKTAB
  2259. TASKTABSTOREMASK    = %1110000000 ; 16*8BYTES=128=7BIT CLEAR
  2260.  
  2261. sb_Flags        = 34    ; LIB_SIZE
  2262. sb_pad          = 35
  2263. sb_SysLib       = 36
  2264. sb_DosLib       = 40
  2265. sb_SegList      = 44
  2266. sb_TASKS        = 48            ; TASKID+A4
  2267. SampleBase_SIZEOF   = NUMTASKS*8+sb_TASKS
  2268.  
  2269. Remove          = -$FC
  2270. FreeMem         = -$D2
  2271.  
  2272. PoolSize        = 256*10+4  ; 256 places for [task:LONG,a4:LONG,open:INT]+4bytes for link
  2273.  
  2274. Start:  MOVEQ   #-1,d0
  2275.     rts
  2276.  
  2277. RomTag: DC.W    $4AFC       ; UWORD RT_MATCHWORD
  2278.     DC.L    RomTag-Start    ; APTR  RT_MATCHTAG [R]
  2279.     DC.L    EndCode-Start   ; APTR  RT_ENDSKIP [R]
  2280.     DC.B    $80     ; UBYTE RT_FLAGS
  2281.     DC.B    VERSION     ; UBYTE RT_VERSION
  2282.     DC.B    9       ; UBYTE RT_TYPE
  2283.     DC.B    0       ; BYTE  RT_PRI
  2284.     DC.L    LibName-Start   ; APTR  RT_NAME [R]
  2285.     DC.L    IDString-Start  ; APTR  RT_IDSTRING [R]
  2286.     DC.L    InitTable-Start ; APTR  RT_INIT  table for InitResident()
  2287.  
  2288. InitTable:
  2289.     DC.L    34+10;SampleBase_SIZEOF   ; size of library base data space
  2290.     DC.L    0               ; pointer to function initializers
  2291.     DC.L    dataTable-Start     ; pointer to data initializers
  2292.     DC.L    initRoutine-Start   ; routine to run
  2293.  
  2294. dataTable:
  2295.     DC.W    -$5FF8
  2296.     DC.B    $9,0
  2297.     DC.W    -$7FF6
  2298.     DC.L    LibName-Start
  2299.     DC.W    -$5FF2,$600,-$6FEC,VERSION,-$6FEA,REVISION,-$7FE8
  2300.     DC.L    IDString-Start,0
  2301.  
  2302. ;; init
  2303. initRoutine:
  2304.     movem.l a1/a5,-(sp)
  2305.     move.l  d0,a5
  2306. PatchLib1:
  2307.     LEA     34(A5),A1
  2308.     bset    #0,9(a1)
  2309.     MOVE.L  A0,(A1)         ; seg list
  2310.     CLR.L   4(A1)        ; task list
  2311.     move.l  a5,d0
  2312.     movem.l (sp)+,a1/a5
  2313.     rts
  2314. ;*-*
  2315. ;; open
  2316. Open:
  2317.     addq.w  #1,LIB_OPENCNT(A6)  ; ( libptr:a6, version:d0 )
  2318.     BSR.W   GETTC
  2319.     CMPA.L  #0,A0
  2320.     BNE     .EXIT
  2321.     BSR     NEWTC
  2322.     BRA     .OKAY
  2323. .FAIL:
  2324.     SUBQ.W  #1,LIB_OPENCNT(A6)  ;
  2325.     MOVEQ   #0,D0               ; AAARGH!!! ERROR!!
  2326.     RTS
  2327. .OKAY:
  2328.     MOVEM.L D2-D7/A0/A2-A6,-(A7)
  2329.     MOVE.L  A0,A5               ; AO POS BEWAREN OM A4 ..
  2330.     BSR LFIRSTSTART
  2331.     MOVEM.L (A7)+,D2-D7/A0/A2-A6
  2332.     TST.L   D0
  2333.     BEQ.S   .FAIL
  2334. .EXIT:
  2335.     ADD.W   #1,4(A0)
  2336.     move.l  a6,d0
  2337.     rts
  2338. ;*-*
  2339. ;; close
  2340. Close:
  2341.     BSR     GETTC
  2342.     CMPA.L  #0,A0
  2343.     BEQ     .1
  2344.     SUB.W   #1,4(A0)
  2345.     MOVEQ   #0,D0
  2346.     TST.W   4(A0)
  2347.     BNE     .1
  2348.  
  2349.     MOVEM.L D2-D7/A2-A6,-(A7)
  2350.     MOVE.L  (A0),A4
  2351.     CLR.L   (A0)
  2352.     CLR.L   -(A0)               ; change is multitask safe
  2353.     BSR LEXITC
  2354.     MOVEM.L (A7)+,D2-D7/A2-A6
  2355.     moveq   #0,d0               ; ( libptr:a6 )
  2356.     subq.w  #1,LIB_OPENCNT(a6)
  2357.     bne.s   .1
  2358.     bsr Expung
  2359. .1: rts
  2360. ;*-*
  2361. ;; Expunge
  2362. Expung:
  2363.     movem.l d2/d7/a4/a5/a6,-(sp)          ; ( libptr: a6 )
  2364. PatchLib2:
  2365.     LEA     34(a6),a4
  2366.     move.l  a6,a5
  2367.     tst.w   LIB_OPENCNT(a5)
  2368.     bne.s   .00                         ; not closed yet
  2369.     btst    #0,9(a4)                    ; avoid self-expunge
  2370.     beq.s   .1
  2371.     bclr    #0,9(a4)
  2372. .00:moveq   #0,d0                       ;
  2373.     bra.s   ExpEnd                      ;
  2374. .1: move.l  (a4),d7                     ; seg list
  2375.     MOVE.L  $4,A6
  2376.     move.l  4(a4),a4
  2377. .L1:MOVE.L  A4,a1
  2378.     move.l  (a1),a4
  2379.     move.l  #PoolSize,D0
  2380.     JSR     -210(a6)                    ; free mem
  2381.     cmpa.l  #0,a4
  2382.     bne     .L1
  2383.  
  2384.     move.l  a5,a1                       ; library
  2385.     jsr Remove(A6)                      ; remove
  2386.     moveq   #0,d0                       ;
  2387.     move.l  a5,a1                       ;
  2388.     move.w  LIB_NEGSIZE(a5),d0
  2389.     sub.l   d0,a1
  2390.     add.w   LIB_POSSIZE(a5),d0
  2391.     jsr FreeMem(A6)                     ; free library extra fields
  2392.     move.l   d7,d0
  2393. ExpEnd:
  2394.     movem.l (sp)+,d2/d7/a4/a5/a6        ; bye
  2395.     rts
  2396. ;*-*
  2397.  
  2398. Null:   moveq   #0,d0
  2399.     rts
  2400.  
  2401.  
  2402. ;; GETTC
  2403. GETTC:
  2404.     LEA     38(a6),a0
  2405.     move.l  (a0),a0
  2406.     MOVE.L  4.W,A1              ; COPY IN GETA4!!!!!!!!
  2407.     MOVE.L  276(A1),d0          ; A1=THISTASK
  2408. .L1:
  2409.     cmpa.l  #0,a0
  2410.     BEQ     .LX
  2411.     move.l  a0,a1               ; current
  2412.     move.l  (a1),a0             ; next
  2413.     addq.l  #8,a1
  2414.     move.l  #255,d1
  2415. .L2:
  2416.     cmp.l   -4(a1),d0
  2417.     beq     .X
  2418.     lea     10(a1),a1
  2419.     dbf     d1,.L2
  2420.     BRA     .L1
  2421. .LX:rts
  2422. .X: MOVE.L  A1,A0
  2423.     RTS
  2424. ;*-*
  2425. ;; NEWTC
  2426. NEWTC:
  2427.     LEA 38(a6),a0
  2428.     move.l  (a0),a0
  2429.     move.l  $4.W,A1
  2430.     MOVE.L  276(a1),d0
  2431. .L1:
  2432.     cmpa.l  #$0,A0
  2433.     BEQ     .LX
  2434.     move.l  a0,a1               ; current
  2435.     move.l  (a1),a0             ; next
  2436.     addq.l  #8,a1
  2437.     move.l  #255,d1
  2438. .L2:
  2439.     tst.l   -4(a1)
  2440.     beq     PatchLibX
  2441.     lea     10(a1),a1
  2442.     dbf     d1,.L2
  2443.     bra     .L1
  2444. .LX:
  2445.     movem.l d0/a6,-(a7)
  2446.     move.l  $4.W,A6
  2447.     move.l  #PoolSize,D0
  2448.     move.l  #$10001,d1
  2449.     jsr     -198(a6)
  2450.     move.l  d0,a0
  2451.     movem.l (a7)+,d0/a6
  2452. PatchLib3:
  2453.     lea     38(a6),a1
  2454.     move.l  (a1),(a0)
  2455.     move.l  a0,(a1)
  2456.     addq.l  #8,a0
  2457.     move.l  d0,-4(a0)
  2458.     rts
  2459. PatchLibX:
  2460.     MOVE.L  A1,A0
  2461.     move.l  d0,-4(a0)
  2462.     RTS
  2463. ;*-*
  2464.  
  2465. EndCode:
  2466.  
  2467. ; same thing, only now for libraries
  2468.  
  2469. LFIRSTSTART:          ; a5 here = ptr to put a4 in
  2470.     MOVE.L  A7,A3           ; A3 = ORIG STACK
  2471.     MOVE.L  4.W,A6
  2472.     MOVE.L  #20000,D0       ; THIS .L IS CHANGED!
  2473.     MOVE.L  #$10000,D1
  2474.     MOVE.L  D0,D2
  2475.     JSR -198(A6)
  2476.     TST.L   D0
  2477.     BEQ.W   LNOMEM
  2478.     MOVE.L  D0,D6           ; D6=BOTTOMSTACK
  2479.     ADD.L   D2,D0
  2480.     JSR -132(A6)        ; --> FORBID
  2481.     MOVE.L  D0,A7
  2482.     ADD.L   #1,A7           ; SIZE IS PATCHED IN
  2483. LLINKC2:
  2484.     LINK    A4,#-4
  2485. LREALSTART:
  2486.     JSR -138(A6)        ; --> PERMIT
  2487.     MOVE.L  A3,-4(A4)
  2488.     MOVE.L  D6,-64(A4)
  2489.     MOVE.L  A6,-40(A4)      ; INIT VARS
  2490.     LEA LINITINTUI(PC),A1   ; OPEN LIBS
  2491. LPOKE37:
  2492.     MOVEQ   #33,D0          ; OR V37!
  2493.     JSR -552(A6)
  2494.     MOVE.L  D0,-48(A4)
  2495.     BEQ LCLINT
  2496.  
  2497.     LEA LINITGFX(PC),A1
  2498.     MOVEQ   #33,D0
  2499.     JSR -552(A6)
  2500.     MOVE.L  D0,-52(A4)
  2501.     BEQ LCLGFX
  2502.     LEA LINITDOS(PC),A1
  2503.     MOVEQ   #33,D0          ; WE WILL USE FUNCTIONS NOT IN V32
  2504.     JSR -552(A6)
  2505.     MOVE.L  D0,-44(A4)
  2506.     BEQ LCLDOS
  2507.     MOVE.L  A4,(A5)         ; PUT A4 IN TABLE
  2508.     BRA.S   LGLOBJUMP
  2509. LINITDOS:     DC.B    "dos.library",0
  2510. LINITINTUI:   DC.B    "intuition.library",0
  2511. LINITGFX:     DC.B    "graphics.library",0
  2512. LZEROSPOT:    DC.B    0
  2513.     EVEN
  2514. LMIDC:
  2515. LGLOBJUMP:
  2516.     JMP LGLOBJUMP
  2517. LNOMEM:
  2518. LRTS:
  2519.     RTS
  2520. LEXITC:               ; START OF CLOSE, A4=A4
  2521.     JSR LEXITC
  2522. LEXITC3:
  2523.     JSR LRTS
  2524. LEXITC2:
  2525.     MOVE.L  A7,-4(A4)
  2526.     MOVE.L  4.W,A6
  2527.     MOVE.L  -20(A4),A2      ; CLEANUP MEMORY
  2528.     MOVE.L  A2,D0
  2529.     BEQ.S   .3
  2530. .4: MOVE.L  A2,A1
  2531.     MOVE.L  4(A2),D0
  2532.     MOVE.L  (A2),A2
  2533.     JSR -210(A6)
  2534.     MOVE.L  A2,D0
  2535.     BNE.S   .4
  2536. .3: MOVE.L  -44(A4),A1
  2537.     JSR -414(A6)        ; closedos
  2538. LCLDOS: MOVE.L  -52(A4),A1
  2539.     JSR -414(A6)        ; closegfx
  2540. LCLGFX: MOVE.L  -48(A4),A1
  2541.     JSR -414(A6)        ; closeintui
  2542. LCLINT:
  2543. LENDC2:
  2544.     MOVE.L  #$20000,D0
  2545.     MOVE.L  -64(A4),A1
  2546.     MOVE.L  -4(A4),A7
  2547.     JSR -210(A6)
  2548.     MOVEQ   #0,D0           ; FAIL (OPEN ONLY)
  2549.     RTS
  2550. LENDC:
  2551.  
  2552. LibName:
  2553. IDString:
  2554.  
  2555. ENDFUNTAB:
  2556.  
  2557. COPYC:                ; A0=START,D0=END,A4=DEST
  2558.     SUB.L   A0,D0
  2559.     LSR.L   #1,D0
  2560.     SUBQ.L  #1,D0
  2561. .1: MOVE.W  (A0)+,(A4)+
  2562.     DBRA    D0,.1
  2563.     RTS
  2564.  
  2565. COPYRELOC:
  2566.     MOVE.L  A4,D0
  2567.     MOVE.L  (A0)+,(A4)+
  2568.     BSR ADDDIVRELOC
  2569.     RTS
  2570.  
  2571. LMAKEINITCODE:
  2572.     MOVE.L  LIBINFO,A6      ; A6=LIBINFO
  2573.     MOVE.L  12(A6),D2
  2574.     SUB.L   (A6),D2
  2575.     LEA Start(PC),A0
  2576.     MOVE.L  (A0)+,(A4)+
  2577.     MOVE.W  (A0)+,(A4)+
  2578.     BSR.S   COPYRELOC       ; MATCHTAG
  2579.     BSR.S   COPYRELOC       ; ENDSKIP
  2580.     MOVE.B  (A0)+,(A4)+
  2581.     ADDQ.L  #1,A0
  2582.     MOVE.B  7(A6),(A4)+     ; VERSION
  2583.     MOVE.W  (A0)+,(A4)+
  2584.     BSR.S   COPYRELOC       ; LIBNAME
  2585.     BSR.S   COPYRELOC       ; IDSTRING
  2586.     ADD.L   D2,-4(A4)
  2587.     BSR.S   COPYRELOC       ; INIT
  2588.     MOVE.L  (A0)+,(A4)+
  2589.     MOVE.L  A4,FUNTABADR
  2590.     ADDQ.L  #4,A0
  2591.     CLR.L   (A4)+           ; FUN INIT
  2592.     BSR.S   COPYRELOC       ; DATA INIT
  2593.     BSR.S   COPYRELOC       ; RUN
  2594.     MOVE.L  (A0)+,(A4)+
  2595.     MOVE.W  (A0)+,(A4)+
  2596.     BSR.S   COPYRELOC       ; LIBNAME
  2597.     MOVE.L  (A0)+,(A4)+
  2598.     MOVE.W  (A0)+,(A4)+
  2599.     ADDQ.L  #2,A0
  2600.     MOVE.W  6(A6),(A4)+     ; VERSION
  2601.     MOVE.W  (A0)+,(A4)+
  2602.     ADDQ.L  #2,A0
  2603.     MOVE.W  10(A6),(A4)+        ; REVISION
  2604.     MOVE.W  (A0)+,(A4)+
  2605.     BSR.S   COPYRELOC       ; IDSTRING
  2606.     ADDQ.L  #4,A0
  2607.     CLR.L   (A4)+
  2608.     ADD.L   D2,-4(A4)
  2609.     MOVE.L  #EndCode,D0
  2610.     BSR.S   COPYC
  2611.     LEA LFIRSTSTART(PC),A0  ; NEW STACK
  2612.     MOVE.L  (A0)+,(A4)+
  2613.     MOVE.L  (A0)+,(A4)+
  2614.     MOVE.L  A4,STACKPOKE
  2615.     ADDQ.L  #4,A4
  2616.     ADDQ.L  #4,A0
  2617.     MOVE.L  #LLINKC2,D0
  2618.     BSR.W   COPYC
  2619.     MOVE.L  A4,AFTERDELEGATESLEA    ; PATCH IN SIZE LATER
  2620.     MOVE.W  LLINKC2(PC),(A4)+
  2621.     MOVE.W  NRGLOB,D7
  2622.     MOVE.W  D7,(A4)+
  2623.     LEA LREALSTART(PC),A0
  2624.     MOVE.L  A4,A6           ; BACKUP
  2625.     MOVE.L  #LMIDC,D0
  2626.     BSR.W   COPYC
  2627. ;    BTST    #0,CODEPREFS+2
  2628. ;    BEQ.S   .NVERS
  2629. ;    LEA LPOKE37-LMIDC+1(A4),A6
  2630. ;    MOVE.W  OSVERSION,D0
  2631. ;    MOVE.B  D0,(A6)
  2632. .NVERS: LEA LGLOBJUMP(PC),A2
  2633.     MOVE.W  (A2),(A4)+
  2634.     MOVEQ   #5,D0
  2635.     JSR ADDBRANCHRELOC
  2636.     MOVE.W  6(A2),(A4)+
  2637.     MOVE.W  LEXITC(PC),(A4)+    ; DELEGATES
  2638.     MOVEQ   #8,D0
  2639.     JSR ADDBRANCHRELOC
  2640.  
  2641.     MOVE.W  LEXITC3(PC),(A4)+   ; this bit links in close()
  2642.     MOVEM.L D3-D4/A1-A3,-(A7)
  2643.     LEA .CLOSE(PC),A3
  2644.     HASH    A3,D3,D4
  2645.     LEA IDENTHASH,A3
  2646.     LSL.L   #2,D3
  2647.     ADD.L   D3,A3
  2648.     ADDQ.L  #4,A3
  2649. .CL:    MOVE.L  -(A3),A3        ; A3=IDENT
  2650.     MOVE.L  A3,D4
  2651.     BEQ.S   .NF
  2652.     MOVE.L  (A3),A2
  2653.     LEA .CLOSE(PC),A1
  2654. .IL:    CMPM.B  (A2)+,(A1)+
  2655.     BNE.S   .CL
  2656.     TST.B   -1(A2)
  2657.     BNE.S   .IL
  2658.     CMPI.B  #LAB,4(A3)
  2659.     BNE.S   .CL
  2660.     MOVE.L  6(A3),D4        ; NO LABELS
  2661.     BEQ.S   .CL
  2662.     MOVE.L  D4,A2           ; A2=PROC
  2663.     BTST    #1,2(A2)
  2664.     BNE ERROR70         ; NO METHODS
  2665.     TST.W   (A2)
  2666.     BNE ERROR70         ; NO ARGS
  2667.     BSET    #0,5(A3)
  2668.     MOVE.W  10(A3),D0
  2669.     JSR ADDBRANCHRELOC
  2670.     BRA.S   .CN
  2671. .CLOSE: DC.B    "close",0
  2672. .NF:    MOVE.L  A4,D0
  2673.     BSR ADDDIVRELOC
  2674.     MOVE.L  A4,D3
  2675.     SUB.L   #LEXITC3-LRTS+2,D3
  2676.     SUB.L   ACODE,D3
  2677.     MOVE.L  D3,(A4)+
  2678. .CN:    MOVEM.L (A7)+,D3-D4/A1-A3
  2679.  
  2680.     LEA LEXITC2(PC),A0
  2681.     MOVE.L  #LENDC2,D0
  2682.     BSR COPYC
  2683.     LEA LENDC2(PC),A0
  2684.     MOVE.W  (A0)+,(A4)+
  2685.     MOVE.L  A4,STACKPOKE+4
  2686.     ADDQ.L  #4,A4
  2687.     ADDQ.L  #4,A0
  2688.     MOVE.L  #LENDC,D0
  2689.     BSR COPYC
  2690.     MOVE.L  LIBINFO,A6
  2691.     MOVE.L  (A6),A0
  2692. .1: MOVE.B  (A0)+,(A4)+
  2693.     BNE.S   .1
  2694.     MOVE.L  12(A6),A0
  2695. .2: MOVE.B  (A0)+,(A4)+
  2696.     BNE.S   .2
  2697.     MOVE.L  A4,D0
  2698.     BTST    #0,D0
  2699.     BEQ.S   .3
  2700.     CLR.B   (A4)+
  2701. .3: BSR FIXPROCCODE
  2702.     MOVE.L  A4,CURACODE
  2703.     RTS
  2704.  
  2705. FUNTABADR:    DC.L    0
  2706.  
  2707. funcTable:
  2708.     dc.l    Open-Start
  2709.     dc.l    Close-Start
  2710.     dc.l    Expung-Start
  2711.     dc.l    Null-Start
  2712.  
  2713. ;; GETA4
  2714. GETA4:
  2715.     MOVEM.L D0/D1/A0/A1,-(A7)
  2716.     LEA     38(a6),a0
  2717.     move.l  (a0),a0
  2718.     MOVE.L  4.W,A1              ; COPY IN GETA4!!!!!!!!
  2719.     MOVE.L  276(A1),d0          ; A1=THISTASK
  2720. .L1:
  2721.     move.l  a0,a1               ; current
  2722.     move.l  (a1),a0             ; next
  2723.     addq.l  #8,a1
  2724.     move.l  #255,d1
  2725. .L2:
  2726.     cmp.l   -4(a1),d0
  2727.     beq     .X
  2728.     lea     10(a1),a1
  2729.     dbf     d1,.L2
  2730.     cmpa.l  #0,a0
  2731.     bne     .L1
  2732.     suba.l  a4,a4               ; not found
  2733.     rts
  2734. .X: MOVE.L  (A1),A4
  2735.     MOVEM.L (A7)+,D0/D1/A0/A1
  2736.     RTS
  2737. ENDGETA4:
  2738. ;*-*
  2739.  
  2740. BUILDLIBFUNS:
  2741.     MOVE.L  LIBINFO,D6
  2742.     BEQ.W   .X
  2743.     MOVE.L  D6,A6           ; A6 = LIBINFO
  2744.     MOVE.L  CURACODE,A4     ; A4 = CODE
  2745.     MOVE.L  FUNTABADR(PC),A5
  2746.     MOVE.L  A4,D0
  2747.     SUB.L   ACODE,D0
  2748.     MOVE.L  D0,(A5)
  2749.     MOVE.L  A5,D0
  2750.     BSR ADDDIVRELOC
  2751.     LEA funcTable(PC),A0
  2752.     BSR COPYRELOC
  2753.     BSR COPYRELOC
  2754.     BSR COPYRELOC
  2755.     BSR COPYRELOC
  2756.     MOVE.L  A4,A2           ; A2 = LIBTAB
  2757.     MOVE.W  18(A6),D0
  2758.     LSL.W   #2,D0
  2759.     ADD.W   D0,A4
  2760.     MOVE.L  #-1,(A4)+
  2761.     MOVE.L  A4,D7           ; D7 = GETA4ADDR
  2762.     LEA GETA4(PC),A0
  2763.     MOVE.L  #ENDGETA4,D0
  2764.     BSR COPYC
  2765.     LEA 20(A6),A6       ; A6 = FUNTAB
  2766. .XL:MOVE.L  (A6)+,D0
  2767.     BEQ.W   .C
  2768.     ADD.W   #20-4,A6
  2769.     MOVE.L  D0,A5           ; A5 = IDENT
  2770.     CMP.B   #LAB,4(A5)
  2771.     BNE ERROR70
  2772.     BTST    #4,5(A5)
  2773.     BNE ERROR70
  2774.     MOVE.L  6(A5),D0
  2775.     BEQ ERROR70
  2776.     MOVE.L  D0,A3           ; A3 = PROC
  2777.     TST.L   10(A3)
  2778.     BNE ERROR70
  2779.     MOVE.L  A2,D0
  2780.     BSR ADDDIVRELOC
  2781.     MOVE.L  A4,D0
  2782.     SUB.L   ACODE,D0
  2783.     MOVE.L  D0,(A2)+
  2784.     MOVE.L  .M1(PC),(A4)+
  2785.     MOVE.W  -2(A6),D4
  2786.     BMI.S   .NS
  2787.     CMP.W   (A3),D4         ; BOTH LIBFUN DECLS NARGS
  2788.     BNE ERROR70
  2789. .NS:    MOVE.W  (A3),D4
  2790.     BEQ.W   .R
  2791.     CMP.W   #13,D4
  2792.     BPL ERROR70
  2793.     TST.W   -4(A6)
  2794.     BMI.S   .NS2
  2795.  
  2796.     MOVEM.L D0/D1/A0,-(A7)
  2797.     LEA -16(A6),A0
  2798.     MOVE.W  -2(A6),D0
  2799.     SUBQ.W  #1,D0
  2800.     MOVEQ   #0,D1
  2801. .RML:   MOVE.B  (A0)+,D1
  2802.     MOVE.W  .MV1(PC),(A4)
  2803.     OR.W    D1,(A4)+
  2804.     DBRA    D0,.RML
  2805.     MOVEM.L (A7)+,D0/D1/A0
  2806.  
  2807.     BRA.S   .R
  2808. .NS2:   CMP.W   #1,D4
  2809.     BEQ.W   .ONE
  2810.     SUBQ.W  #2,D4
  2811.     LSL.W   #1,D4
  2812.     MOVE.W  .M1(PC),(A4)+
  2813.     MOVE.W  .TAB(PC,D4.W),(A4)+
  2814. .R: MOVE.W  .BSR(PC),(A4)+      ; 2XENTRY
  2815.     MOVE.L  D7,D0
  2816.     SUB.L   A4,D0
  2817.     MOVE.W  D0,(A4)+
  2818.     MOVE.W  10(A5),D0
  2819.     MOVE.W  .JSR(PC),NEWOP
  2820.     MOVE.L  .BSR(PC),(A4)+
  2821.     JSR ADDBRANCH
  2822.     MOVE.W  (A3),D4
  2823.     BEQ.S   .R2
  2824.     CMP.W   #1,D4
  2825.     BEQ.S   .ONEA
  2826.     CMP.W   #2,D4
  2827.     BEQ.S   .TWOA
  2828.     LSL.W   #2,D4
  2829.     MOVE.W  .LEA(PC),(A4)+
  2830.     MOVE.W  D4,(A4)+
  2831. .R2:    MOVE.L  .M2(PC),(A4)+
  2832.     MOVE.W  .RTS(PC),(A4)+
  2833.     BRA.W   .XL
  2834. .C: MOVE.L  A4,CURACODE
  2835. .X: RTS
  2836. .TAB:   DC.W    %1000000010000000   ; 2
  2837.     DC.W    %1100000010000000   ; 3
  2838.     DC.W    %1100000011000000   ; 4
  2839.     DC.W    %1110000011000000   ; 5
  2840.     DC.W    %1110000011100000   ; 6
  2841.     DC.W    %1111000011100000   ; 7
  2842.     DC.W    %1111000011110000   ; 8
  2843.     DC.W    %1111100011110000   ; 9
  2844.     DC.W    %1111110011110000   ; 10
  2845.     DC.W    %1111111011110000   ; 11
  2846.     DC.W    %1111111111110000   ; 12
  2847. .M1:    MOVEM.L D2/A2-A6,-(A7)
  2848. .M2:    MOVEM.L (A7)+,D2/A2-A6
  2849. .MV1:   MOVE.L  D0,-(A7)
  2850. .RTS:   RTS
  2851. .BSR:   BSR .X
  2852. .JSR:   JSR .X
  2853. .LEA:   LEA 4(A7),A7
  2854. .ADD1:  ADDQ.L  #4,A7
  2855. .ADD2:  ADDQ.L  #8,A7
  2856. .ONE:   MOVE.W  .MV1(PC),(A4)+
  2857.     BRA.W   .R
  2858. .ONEA:  MOVE.W  .ADD1(PC),(A4)+
  2859.     BRA.S   .R2
  2860. .TWOA:  MOVE.W  .ADD2(PC),(A4)+
  2861.     BRA.S   .R2
  2862.  
  2863. WRITELIBMOD:
  2864.     MOVE.L  LIBINFO,D0
  2865.     BEQ.W   .X
  2866.     MOVE.L  D0,A5           ; A5=LIBINFO
  2867.     MOVE.L  (A5),D1         ; D1/A2=LIBNAME
  2868.     MOVE.L  D1,A2
  2869.     MOVE.L  D1,A3           ; A3=DOTLOCATION
  2870. .XL:TST.B   (A3)
  2871.     BEQ.S   .F
  2872.     CMP.B   #".",(A3)+
  2873.     BNE.S   .XL
  2874. .F: MOVE.B  #"m",(A3)+
  2875.     CLR.B   (A3)+
  2876.     MOVE.L  D1,D0
  2877.     JSR FLUSHMODULE
  2878.     MOVE.L  #1006,D2
  2879.     MOVE.L  DOSBASE,A6
  2880.     JSR -30(A6)
  2881.     MOVE.L  D0,HANDLE
  2882.     BEQ ERROR17
  2883.     CLR.B   1(A3)
  2884.     MOVE.B  #"e",(A3)
  2885.     MOVE.B  #"s",-(A3)
  2886.     MOVE.B  #"a",-(A3)
  2887.     MOVE.B  #"b",-(A3)
  2888.     MOVE.L  #ESTACKBUF,A4       ; A4=BUF,D4=BEGIN
  2889.     MOVE.L  A4,D4
  2890.     MOVE.L  #"EMOD",(A4)+
  2891.     MOVE.W  #6,(A4)+
  2892.     CLR.B   (A4)+
  2893. .BL:    MOVE.B  (A2)+,(A4)+
  2894.     BNE.S   .BL
  2895.     LEA 20(A5),A5
  2896. .NL:    MOVE.L  (A5)+,D0
  2897.     BEQ.W   .FL
  2898.     ADD.W   #20-4,A5
  2899.     MOVE.L  D0,A3           ; A3=IDENT
  2900.     MOVE.L  (A3),A2
  2901.     MOVE.B  (A2)+,D0
  2902.     CMP.B   #"a",D0
  2903.     BPL.W   .UP
  2904. .UPB:   MOVE.B  D0,(A4)+
  2905. .CL:    MOVE.B  (A2)+,(A4)+
  2906.     BNE.S   .CL
  2907.     SUBQ.L  #1,A4
  2908.  
  2909.     MOVE.L  6(A3),A3        ; A3=PROC
  2910.     MOVE.W  (A3),D0
  2911.     BEQ.W   .NRG
  2912.  
  2913.     TST.W   -2(A5)
  2914.     BMI.S   .NRA
  2915.     LEA -16(A5),A3
  2916.     SUBQ.L  #1,D0
  2917. .CRA:   MOVE.B  (A3)+,(A4)+
  2918.     DBRA    D0,.CRA
  2919.     BRA.S   .NRGB
  2920.  
  2921. .NRA:   MOVE.W  D0,D1
  2922.     MOVEQ   #0,D2
  2923.     LSR.W   #1,D1
  2924.     TST.W   D1
  2925.     BEQ.S   .DR
  2926.     CMP.W   #5,D1
  2927.     BMI.S   .AR
  2928.     MOVEQ   #4,D1
  2929. .AR:    MOVE.W  D1,D2
  2930.     SUBQ.W  #1,D1
  2931. .ARL:   MOVE.B  D1,D3
  2932.     ADD.B   #8,D3
  2933.     MOVE.B  D3,(A4)+
  2934.     DBRA    D1,.ARL
  2935. .DR:    SUB.W   D2,D0
  2936.     SUBQ.W  #1,D0
  2937. .DRL:   MOVE.B  D0,(A4)+
  2938.     DBRA    D0,.DRL
  2939.  
  2940. .NRGB:  CHESTB  A4,D0,3,ERROR37
  2941.     BRA.W   .NL
  2942.  
  2943. .FL:    MOVE.B  #-1,(A4)+
  2944.     MOVE.L  A4,D3
  2945.     MOVE.L  D4,D2
  2946.     SUB.L   D2,D3
  2947.     JSR WRITEFILE
  2948.     MOVE.L  DOSBASE,A6
  2949.     MOVE.L  HANDLE,D1
  2950.     JSR -36(A6)
  2951. .X: RTS
  2952. .UP:    CMP.B   #"z"+1,D0
  2953.     BPL.W   .UPB
  2954.     SUB.B   #32,D0
  2955.     BRA.W   .UPB
  2956. .NRG:   MOVE.B  #16,(A4)+
  2957.     BRA.S   .NRGB
  2958. ;*-*
  2959. ;; Nostartup
  2960. ; ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;
  2961. ;   and again mit kein startup routines
  2962. ; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
  2963.  
  2964. NSMAKEINITCODE:
  2965.     MOVE.W  #3,CURSPOT
  2966.     MOVE.L  CURACODE,A4
  2967.     BTST    #3,CODEPREFS+3
  2968.     BNE .EX
  2969.     TSTMOD
  2970.     BNE .EX
  2971.     LEA NSFIRSTSTART(PC),A0   ; NEW STACK
  2972.     MOVE.L  (A0)+,(A4)+
  2973.     MOVE.L  (A0)+,(A4)+
  2974.     MOVE.W  (A0)+,(A4)+
  2975.     MOVE.L  A4,STACKPOKE
  2976.     ADDQ.L  #4,A4
  2977.     ADDQ.L  #4,A0
  2978.     MOVE.L  #NSLINKC2,D0
  2979.     BSR COPYC
  2980.     MOVE.L  A4,AFTERDELEGATESLEA    ; PATCH IN SIZE LATER
  2981.     MOVE.W  NSLINKC2(PC),(A4)+
  2982.     MOVE.W  NRGLOB,D7
  2983.     MOVE.W  D7,(A4)+
  2984.     LEA NSREALSTART(PC),A0
  2985.     MOVE.L  A4,A6           ; BACKUP
  2986.     MOVE.L  #NSMIDC,D0
  2987.     BSR COPYC
  2988.     MOVE.W  NSGLOBJUMP(PC),(A4)+
  2989.     MOVEQ   #5,D0
  2990.     JSR ADDBRANCHRELOC
  2991.     MOVE.W  NSEXITC(PC),(A4)+     ; DELEGATES
  2992.     MOVEQ   #8,D0
  2993.     JSR ADDBRANCHRELOC
  2994.     LEA NSEXITC2(PC),A0
  2995.     MOVE.L  #NSENDC2,D0
  2996.     BSR COPYC
  2997.     LEA NSENDC2(PC),A0
  2998.     MOVE.L  A4,BEFORESECONDLEA
  2999.     MOVE.L  (A0)+,(A4)+
  3000.     MOVE.L  (A0)+,(A4)+
  3001.     MOVE.L  A4,STACKPOKE+4
  3002.     ADDQ.L  #4,A4
  3003.     ADDQ.L  #4,A0
  3004.     MOVE.L  #NSST2,D0
  3005.     BSR COPYC
  3006.     MOVE.L  NSST2,(A4)+
  3007.     BSR FIXPROCCODE
  3008.     MOVE.L  A4,CURACODE
  3009. .EX:    RTS
  3010.  
  3011. NSFIRSTSTART:         ; CHANGES ALSO TO LFIRSTART!!!
  3012.     MOVE.L  4.W,A6
  3013.     MOVE.L  A0,A5           ; SAVE A0/D0 TO A5/D7
  3014.     MOVE.L  D0,D7
  3015.     MOVE.L  #20000,D0       ; THIS .L IS CHANGED!
  3016.     MOVE.L  #$10000,D1
  3017.     MOVE.L  D0,D2
  3018.     JSR     -198(A6)
  3019.     TST.L   D0
  3020.     BNE.S   NOST_1
  3021.     MOVEQ   #20,D0          ; NO FUCKIN' MEM !
  3022.     RTS
  3023. A4STORAGE_NOST:
  3024.     DC.L    0
  3025. NOST_1:
  3026.     MOVE.L  D0,D6           ; D6=BOTTOMSTACK
  3027.     ADD.L   D2,D0
  3028.     JSR -132(A6)        ; --> FORBID
  3029.     EXG.L   D0,A7
  3030.     MOVE.L  D0,-(A7)
  3031.     ADD.L   #1,A7           ; SIZE IS PATCHED IN
  3032. NSLINKC2:
  3033.     LINK    A4,#-4
  3034. NSREALSTART:
  3035.     JSR -138(A6)        ; --> PERMIT
  3036.     MOVE.L  D6,-64(A4)
  3037.  
  3038.     MOVE.L  A6,-40(a4)
  3039.     MOVE.L  A7,-4(A4)
  3040.     LEA     A4STORAGE_NOST(PC),A1
  3041.     MOVE.L  A4,(A1)
  3042.  
  3043. NSMIDC:
  3044. NSGLOBJUMP:
  3045.     JSR NSGLOBJUMP
  3046. NSEXITC:
  3047.     JSR NSEXITC
  3048. NSEXITC2:
  3049.     MOVE.L  -4(A4),A7
  3050.     MOVE.L  4.W,A6
  3051.     MOVE.L  -20(A4),A2      ; CLEANUP MEMORY
  3052.     MOVE.L  A2,D0
  3053.     BEQ.S   .3
  3054. .4: MOVE.L  A2,A1
  3055.     MOVE.L  4(A2),D0
  3056.     MOVE.L  (A2),A2
  3057.     JSR -210(A6)
  3058.     MOVE.L  A2,D0
  3059.     BNE.S   .4
  3060. .3:
  3061.     MOVE.L  -28(A4),D2      ; EXITCODE
  3062.     UNLK    A4
  3063. NSENDC2:
  3064.     ADD.L   #1,A7
  3065.     MOVE.L  #$20000,D0
  3066.     MOVE.L  (A7)+,A1
  3067.     EXG.L   A1,A7
  3068.     SUBA.L  D0,A1
  3069.     JSR -210(A6)
  3070. NSST2:
  3071.     MOVE.L  D2,D0
  3072.     RTS
  3073. NSENDC:
  3074. ;*-*
  3075. ;; Other!
  3076.  
  3077. OTHEREXITCODE:
  3078.     MOVE.W  #11,CURSPOT
  3079.     BSR BUILDDELEGATECONSTRUCTORS
  3080. ;    BSR FIXSTARTUPCODE
  3081.     RTS
  3082.  
  3083.  
  3084. OTHERINITCODE:
  3085.     MOVEM.L D0-A6,-(A7)
  3086.     LEA STCNAME,A0
  3087.     LEA LIBLIST+4,A1
  3088. .L1:
  3089.     MOVe.L  A0,A3
  3090.     MOVE.L  LIB_NEXT(A1),D0
  3091.     BEQ ERROR42
  3092.     MOVE.L  D0,A1
  3093.     CMP.W   #2,LIB_TYPE(A1)
  3094.     BNE .L1
  3095.     MOVE.L  LIB_NAME(A1),A2
  3096. .L2:
  3097.     CMP.B   (A2)+,(A3)+
  3098.     BNE .L1
  3099.     TST.B   -1(A3)
  3100.     BNE .L2
  3101.  
  3102.     MOVE.L  LIB_CODE(A1),STARTUP_CODE
  3103.     MOVE.L  LIB_CLEN(A1),STARTUP_SIZE
  3104.     MOVE.L  LIB_XTNS(A1),STARTUP_XTNS
  3105.     MOVE.L  A1,STARTUP_NODE
  3106.     MOVEM.L (A7)+,D0-A6
  3107.  
  3108.     MOVE.L  CURACODE,A4
  3109.     MOVE.L  A4,A6
  3110.     MOVEM.L D0-A3,-(A7)
  3111.     BTST    #4,ICODEPREFS+3
  3112.     BEQ     .z
  3113.     BSR BGCODE
  3114. .z:
  3115.     MOVEM.L (A7)+,D0-A3
  3116.     MOVE.L  A4,CURACODE
  3117.  
  3118.     MOVE.L  STARTUP_CODE,A0
  3119.     MOVE.L  STARTUP_SIZE,D0
  3120.     LSR.W   #1,D0
  3121.     SUBQ.L  #1,D0
  3122. .LOOP:
  3123.     MOVE.W  (A0)+,(A4)+
  3124.     DBF D0,.LOOP
  3125.  
  3126.     BSR FIXSTARTUPCODE2
  3127.  
  3128.     BSR FIXPROCCODE
  3129.  
  3130.     MOVEM.L  A0/A6,-(A7)
  3131.     MOVE.L  CURACODE,A6
  3132.     MOVE.L  STARTUP_NODE,A0
  3133.     BSR FIXRELOC
  3134.     MOVEM.L (A7)+,A0/A6
  3135.  
  3136.     MOVE.L  A4,CURACODE
  3137.     RTS
  3138.  
  3139.     IFEQ 1
  3140. ;; FIXSTARTUPCODE
  3141. FIXSTARTUPCODE:
  3142.     MOVEM.L D0-A6,-(A7)
  3143.     MOVE.L  CURACODE,A0
  3144.     MOVE.L  STARTUP_XTNS,A1
  3145. .X_LOOP:
  3146.     MOVE.L  (A1)+,D0
  3147.     BNE.S   .X_CONT
  3148.     MOVEM.L (A7)+,D0-A6
  3149.     RTS
  3150. .X_CONT:
  3151.     MOVE.L  D0,D1
  3152.     ROL.L   #8,D1
  3153.     AND.L   #255,D1
  3154.     AND.L   #$FFFFFF,D0
  3155.  
  3156.     MOVE.L  A1,A5
  3157.     LOWER2 A1,D2
  3158.     MOVE.L  A5,A1
  3159.  
  3160.     CMP.W   #$81,D1
  3161.     BEQ     .x81
  3162.     CMP.W   #$83,D1
  3163.     BEQ     .x83
  3164.  
  3165.     LSL.L   #2,D0
  3166.     ADD.L   D0,A1
  3167.     MOVE.L  (A1)+,D0
  3168.     CMP.W   #$80,D1
  3169.     BMI .X_LOOP
  3170.     LSL.L   #2,D0
  3171.     ADD.L   D0,A0
  3172.     BRA     .X_LOOP
  3173. ;; Check
  3174. .CHECKNAME:
  3175.     MOVE.L  A1,-(A7)
  3176.     MOVEQ   #0,D2
  3177. .CHECKTST:
  3178.     CMPM.B  (A1)+,(A2)+
  3179.     BNE .CHECKF
  3180.     TST.B   -1(A1)
  3181.     BNE .CHECKTST
  3182.     MOVEQ   #-1,D2
  3183. .CHECKF:
  3184.     MOVE.L  (A7)+,A1
  3185.     RTS
  3186. ;*-*
  3187. ;; 0x81
  3188. .x81:
  3189.     LEA ._SETUP(PC),A2
  3190.     BSR .CHECKNAME
  3191.     TST.L   D2
  3192.     BNE .x81_SETUP
  3193.  
  3194.     LEA ._DELMEM(PC),A2
  3195.     BSR .CHECKNAME
  3196.     TST.L   D2
  3197.     BNE .x81_DELMEM
  3198.  
  3199.     LEA ._STKSIZE(PC),A2
  3200.     BSR .CHECKNAME
  3201.     TST.L   D2
  3202.     BNE .x81_STKSIZE
  3203.  
  3204.     MOVEQ   #0,D1
  3205.     MOVE.W  OSVERSION,D1
  3206.     LEA .OSVERSION(PC),A2
  3207.     BSR .CHECKNAME
  3208.     TST.L   D2
  3209.     BNE .x81_FILL
  3210.  
  3211.     MOVE.W  ASMCPU,D1
  3212.     LEA .CPUFLAGS(PC),A2
  3213.     BSR .CHECKNAME
  3214.     TST.L   D2
  3215.     BNE .x81_FILL
  3216.  
  3217.     LEA ._CLEANUP(PC),A2
  3218.     BSR .CHECKNAME
  3219.     TST.L   D2
  3220.     BNE .x81_CLEANUP
  3221.  
  3222.     CLR.W   ERRWHERE
  3223.     BRA ERROR42
  3224.  
  3225. ;; names
  3226. ._SETUP:
  3227.     DC.B    '_setup',0
  3228. ._CLEANUP:
  3229.     DC.B    '_cleanup',0
  3230. ._DELMEM:
  3231.     DC.B    '_delmem',0
  3232. ._STKSIZE:
  3233.     DC.B    '_stksize',0
  3234.     EVEN
  3235. ;*-*
  3236. ;; subcodes
  3237. ;; Fill
  3238. .x81_FILL:
  3239.     LSL.L   #2,D0
  3240.     ADD.L   D0,A1
  3241.     MOVE.L  (A1)+,D2
  3242.     SUBQ.L  #1,D2
  3243. .x81_FILL_LOOP:
  3244.     MOVE.L  A0,A4
  3245.     ADD.L   (A1)+,A4
  3246.     MOVE.L  D1,(A4)
  3247.     DBF D2,.x81_FILL_LOOP
  3248.     BRA .X_LOOP
  3249. ;*-*
  3250. ;; SETUP
  3251. .x81_SETUP:
  3252.     LSL.L   #2,D0
  3253.     ADD.L   D0,A1
  3254.     MOVE.L  (A1)+,D2
  3255.     SUBQ.L  #1,D2
  3256. .x81_SETUP_LOOP:
  3257.     MOVE.L  A0,A4
  3258.     ADD.L   (A1)+,A4
  3259.     MOVEQ   #5,D0
  3260.     MOVEm.L  D1/A0,-(A7)
  3261.     JSR ADDBRANCHRELOC
  3262.     MOVEm.L  (a7)+,d1/a0
  3263.     DBF D2,.x81_SETUP_LOOP
  3264.     BRA .X_LOOP
  3265. ;*-*
  3266. ;; CLEANUP
  3267. .x81_CLEANUP:
  3268.     LSL.L   #2,D0
  3269.     ADD.L   D0,A1
  3270.     MOVE.L  (A1)+,D2
  3271.     SUBQ.L  #1,D2
  3272.     BSET    #6,ICODEPREFS+3
  3273. .x81_CLEANUP_LOOP:
  3274.     MOVE.L  A0,A4
  3275.     ADD.L   (A1)+,A4
  3276.     MOVEQ   #8,D0
  3277.     MOVEm.L  D1/A0,-(A7)
  3278.     JSR ADDBRANCHRELOC
  3279.     MOVEm.L  (a7)+,d1/a0
  3280.     DBF D2,.x81_CLEANUP_LOOP
  3281.     BRA .X_LOOP
  3282. ;*-*
  3283. ;; DELMEM
  3284. .x81_DELMEM:
  3285.     LSL.L   #2,D0
  3286.     ADD.L   D0,A1
  3287.     MOVE.L  (A1)+,D2
  3288.     SUBQ.L  #1,D2
  3289. .x81_DELMEM_LOOP:
  3290.     MOVE.L  A0,A4
  3291.     ADD.L   (A1)+,A4
  3292.     MOVE.L  TOTALDELSIZE(PC),(A4)
  3293.     DBF D2,.x81_DELMEM_LOOP
  3294.     BRA .X_LOOP
  3295. ;*-*
  3296. ;; STKSIZE
  3297. .x81_STKSIZE:
  3298.     LSL.L   #2,D0
  3299.     ADD.L   D0,A1
  3300.     MOVE.L  (A1)+,D2
  3301.     SUBQ.L  #1,D2
  3302.     MOVE.L  TOTALDELSIZE(PC),D1
  3303.     ADD.L   MINSTACK,D1
  3304.     ADD.L   GLOBSTACK,D1
  3305.     BSR .x81_STKSIZE_CHECK
  3306. .x81_STKSIZE_LOOP:
  3307.     MOVE.L  A0,A4
  3308.     ADD.L   (A1)+,A4
  3309.     MOVE.L  D1,(A4)
  3310.     DBF D2,.x81_STKSIZE_LOOP
  3311.     BRA .X_LOOP
  3312.  
  3313. .x81_STKSIZE_CHECK:
  3314.     MOVE.L  CODESTACK,D3
  3315.     BEQ     .x81_STKSIZE_EXIT2
  3316.     CMP.L   D1,D3
  3317.     BPL.S   .x81_STKSIZE_CHECK2
  3318.     BSET    #2,WARNINGS+3
  3319. .x81_STKSIZE_CHECK2:
  3320.     ADD.L   #4000,D1
  3321.     CMP.L   D1,D3
  3322.     BPL.S   .x81_STKSIZE_EXIT
  3323.     BSET    #1,WARNINGS+3
  3324.     BCLR    #2,WARNINGS+3
  3325. .x81_STKSIZE_EXIT:
  3326.     RTS
  3327. .x81_STKSIZE_EXIT2:
  3328.     ADD.L   #MINSTACKSIZE,D1
  3329.     RTS
  3330. ;*-*
  3331. ;*-*
  3332. ;*-*
  3333. ;; 0x83
  3334. .x83:
  3335.     MOVE.W  NRGLOB,D1
  3336.     LEA ._STKFRAME(PC),A2
  3337.     BSR .CHECKNAME
  3338.     TST.L   D2
  3339.     BNE .x83_FILL
  3340.  
  3341.     MOVEQ   #-44,D1
  3342.     LEA .DBASE(PC),A2
  3343.     BSR .CHECKNAME
  3344.     TST.L   D2
  3345.     BNE .x83_FILL
  3346.  
  3347.     MOVEQ   #-48,D1
  3348.     LEA .IBASE(PC),A2
  3349.     BSR .CHECKNAME
  3350.     TST.L   D2
  3351.     BNE .x83_FILL
  3352.  
  3353.     MOVEQ   #-52,d1
  3354.     LEA .GBASE(PC),A2
  3355.     BSR .CHECKNAME
  3356.     TST.L   D2
  3357.     BNE .x83_FILL
  3358.  
  3359.     MOVEQ   #-8,d1
  3360.     LEA .SOUT(PC),A2
  3361.     BSR .CHECKNAME
  3362.     TST.L   D2
  3363.     BNE .x83_FILL
  3364.  
  3365.     MOVEQ   #-16,d1
  3366.     LEA .SRAST(PC),A2
  3367.     BSR .CHECKNAME
  3368.     TST.L   D2
  3369.     BNE .x83_FILL
  3370.  
  3371.     MOVEQ   #-32,d1
  3372.     LEA .ARG(PC),A2
  3373.     BSR .CHECKNAME
  3374.     TST.L   D2
  3375.     BNE .x83_FILL
  3376.  
  3377.     MOVEQ   #-36,d1
  3378.     LEA .WBMSG(PC),A2
  3379.     BSR .CHECKNAME
  3380.     TST.L   D2
  3381.     BNE .x83_FILL
  3382.  
  3383.     MOVEQ   #-56,D1
  3384.     LEA .SBBASE(PC),A2
  3385.     BSR .CHECKNAME
  3386.     TST.L   D2
  3387.     BNE .x83_FILL
  3388.  
  3389.     MOVEQ   #-60,D1
  3390.     LEA .STBASE(PC),A2
  3391.     BSR .CHECKNAME
  3392.     TST.L   D2
  3393.     BNE .x83_FILL
  3394.  
  3395.     MOVE.L  #-96,D1
  3396.     LEA .XCPI(PC),A2
  3397.     BSR .CHECKNAME
  3398.     TST.L   D2
  3399.     BNE .x83_FILL
  3400.  
  3401.     MOVE.L  #-92,D1
  3402.     LEA .SIN(PC),A2
  3403.     BSR .CHECKNAME
  3404.     TST.L   D2
  3405.     BNE .x83_FILL
  3406.  
  3407.     MOVE.L  #-120,D1
  3408.     LEA .POOL(PC),A2
  3409.     BSR .CHECKNAME
  3410.     TST.L   D2
  3411.     BNE .x83_FILL
  3412.  
  3413.     MOVE.L  #-124,D1
  3414.     LEA .UBASE(PC),A2
  3415.     BSR .CHECKNAME
  3416.     TST.L   D2
  3417.     BNE .x83_FILL
  3418.  
  3419.     MOVE.L  #-4,D1
  3420.     LEA .STKRET(PC),A2
  3421.     BSR .CHECKNAME
  3422.     TST.L   D2
  3423.     BNE .x83_FILL
  3424.  
  3425.     MOVE.L  #-20,D1
  3426.     LEA .MEMLIST(PC),A2
  3427.     BSR .CHECKNAME
  3428.     TST.L   D2
  3429.     BNE .x83_FILL
  3430.  
  3431.     MOVE.L  #-24,D1
  3432.     LEA .EXITCODE(PC),A2
  3433.     BSR .CHECKNAME
  3434.     TST.L   D2
  3435.     BNE .x83_FILL
  3436.  
  3437.     MOVE.L  #-40,D1
  3438.     LEA .EBASE(PC),A2
  3439.     BSR .CHECKNAME
  3440.     TST.L   D2
  3441.     BNE .x83_FILL
  3442.  
  3443.     MOVE.L  #-28,D1
  3444.     LEA .RETVAL(PC),A2
  3445.     BSR .CHECKNAME
  3446.     TST.L   D2
  3447.     BNE .x83_FILL
  3448.  
  3449.     MOVE.L  #-64,D1
  3450.     LEA .BTMSTK(PC),A2
  3451.     BSR .CHECKNAME
  3452.     TST.L   D2
  3453.     BNE .x83_FILL
  3454.  
  3455.     MOVE.L  #-128,D1
  3456.     LEA .FILELIST(PC),A2
  3457.     BSR .CHECKNAME
  3458.     TST.L   D2
  3459.     BNE .x83_FILL
  3460.  
  3461.     MOVEQ   #0,D1
  3462.     MOVE.W  OSVERSION,D1
  3463.     LEA .OSVERSION(PC),A2
  3464.     BSR .CHECKNAME
  3465.     TST.L   D2
  3466.     BNE .x83_FILL
  3467.  
  3468.     MOVE.W  ASMCPU,D1
  3469.     LEA .CPUFLAGS(PC),A2
  3470.     BSR .CHECKNAME
  3471.     TST.L   D2
  3472.     BNE .x83_FILL
  3473.  
  3474.     CLR.W   ERRWHERE
  3475.     BRA ERROR42
  3476. ;; names
  3477. .STKRET:
  3478.     DC.B    '_stkreturn',0
  3479. .MEMLIST:
  3480.     Dc.b    '_memlist',0
  3481. .EXITCODE:
  3482.     DC.B    '_exitcode',0
  3483. .BTMSTK:
  3484.     dc.b    '_bottomstk',0
  3485. .FILELIST:
  3486.     DC.B    '_filelist',0
  3487. .RETVAL:
  3488.     DC.B    '_clireturnvalue',0
  3489. ._STKFRAME:
  3490.     DC.B    '_stkframe',0
  3491. .DBASE:
  3492.     DC.B    '_dosbase',0
  3493. .IBASE:
  3494.     DC.B    '_intuitionbase',0
  3495. .GBASE:
  3496.     DC.B    '_gfxbase',0
  3497. .EBASE:
  3498.     DC.B    '_execbase',0
  3499. .SOUT:
  3500.     DC.B    '_stdout',0
  3501. .SRAST:
  3502.     DC.B    '_stdrast',0
  3503. .ARG:
  3504.     DC.B    '_arg',0
  3505. .WBMSG:
  3506.     DC.B    '_wbmessage',0
  3507. .SBBASE:
  3508.     DC.B    '_mathieeesingbasbase',0
  3509. .STBASE:
  3510.     DC.B    '_mathieeesingtransbase',0
  3511. .XCP:
  3512.     DC.B    '_exception',0
  3513. .XCPI:
  3514.     Dc.B    '_exceptioninfo',0
  3515. .SIN:
  3516.     DC.B    '_stdin',0
  3517. .UBASE:
  3518.     DC.B    '_utilitybase',0
  3519. .POOL:
  3520.     DC.B    '_pool',0
  3521. .OSVERSION:
  3522.     DC.B    '_osversion',0
  3523. .CPUFLAGS:
  3524.     DC.B    '_cpuflags',0
  3525.     EVEN
  3526. ;*-*
  3527. ;; subcode(s)
  3528. ;; Fill
  3529. .x83_FILL:
  3530.     LSL.L   #2,D0
  3531.     ADD.L   D0,A1
  3532.     MOVE.L  (A1)+,D2
  3533.     SUBQ.L  #1,D2
  3534. .x83_FILL_LOOP:
  3535.     MOVE.L  A0,A4
  3536.     ADD.L   (A1)+,A4
  3537.     MOVE.W  D1,(A4)
  3538.     DBF D2,.x83_FILL_LOOP
  3539.     BRA .X_LOOP
  3540. ;*-*
  3541. ;*-*
  3542. ;*-*
  3543. ;*-*
  3544.     ENDC
  3545. ;; FIXSTARTUPCODE2
  3546. FIXSTARTUPCODE2:
  3547.     MOVEM.L D0-A6,-(A7)
  3548.     MOVE.L  CURACODE,A0
  3549.     MOVE.L  STARTUP_XTNS,A1
  3550. .X_LOOP:
  3551.     MOVE.L  (A1)+,D0
  3552.     BNE.S   .X_CONT
  3553.     MOVEM.L (A7)+,D0-A6
  3554.     RTS
  3555. .X_CONT:
  3556.     MOVE.L  D0,D1
  3557.     ROL.L   #8,D1
  3558.     AND.L   #255,D1
  3559.     AND.L   #$FFFFFF,D0
  3560.  
  3561.     MOVE.L  A1,A5
  3562.     LOWER2  A1,D2
  3563.     MOVE.L  A5,A1
  3564.  
  3565.     BTST    #7,D1
  3566.     BEQ     .x01
  3567.     CMP.W   #$81,D1
  3568.     BEQ     .x81
  3569.     CMP.W   #$83,D1
  3570.     BEQ     .x83
  3571.  
  3572.     LSL.L   #2,D0
  3573.     ADD.L   D0,A1
  3574.     MOVE.L  (A1)+,D0
  3575.     LSL.L   #2,D0
  3576.     ADD.L   D0,A1
  3577.     BRA     .X_LOOP
  3578. ;; Check
  3579. .CHECKNAME:
  3580.     MOVE.L  A1,-(A7)
  3581.     MOVEQ   #0,D2
  3582. .CHECKTST:
  3583.     CMPM.B  (A1)+,(A2)+
  3584.     BNE .CHECKF
  3585.     TST.B   -1(A1)
  3586.     BNE .CHECKTST
  3587.     MOVEQ   #-1,D2
  3588. .CHECKF:
  3589.     MOVE.L  (A7)+,A1
  3590.     RTS
  3591. ;*-*
  3592. ;; x01
  3593. .x01:
  3594.     LEA ._A4STORAGE(PC),A2
  3595.     BSR .CHECKNAME
  3596.     TST.L   D2
  3597.     BNE .x01_A4STORAGE
  3598.  
  3599.     CLR.W   ERRWHERE
  3600.     BRA ERROR42
  3601. ;; names
  3602. ._A4STORAGE:
  3603.     DC.B    '_a4storage',0
  3604.     EVEN
  3605. ;*-*
  3606. ;; subcodes
  3607. ;; A4STORAGE
  3608. .x01_A4STORAGE:
  3609.     LSL.L   #2,D0
  3610.     ADD.L   D0,A1
  3611.     MOVE.L  (A1)+,A4STORAGEADR
  3612.     BRA .X_LOOP
  3613. ;*-*
  3614. ;*-*
  3615. ;*-*
  3616. ;; x81
  3617. .x81:
  3618.     LEA ._SETUP(PC),A2
  3619.     BSR .CHECKNAME
  3620.     TST.L   D2
  3621.     BNE .x81_SETUP
  3622.  
  3623.     LEA ._DELMEM(PC),A2
  3624.     BSR .CHECKNAME
  3625.     TST.L   D2
  3626.     BNE .x81_DELMEM
  3627.  
  3628.     LEA ._STKSIZE(PC),A2
  3629.     BSR .CHECKNAME
  3630.     TST.L   D2
  3631.     BNE .x81_STKSIZE
  3632.  
  3633.     MOVEQ   #0,D1
  3634.     MOVE.W  OSVERSION,D1
  3635.     LEA .OSVERSION(PC),A2
  3636.     BSR .CHECKNAME
  3637.     TST.L   D2
  3638.     BNE .x81_FILL
  3639.  
  3640.     MOVE.W  ASMCPU,D1
  3641.     LEA .CPUFLAGS(PC),A2
  3642.     BSR .CHECKNAME
  3643.     TST.L   D2
  3644.     BNE .x81_FILL
  3645.  
  3646.     LEA ._CLEANUP(PC),A2
  3647.     BSR .CHECKNAME
  3648.     TST.L   D2
  3649.     BNE .x81_CLEANUP
  3650.  
  3651.     CLR.W   ERRWHERE
  3652.     BRA ERROR42
  3653.  
  3654. ;; names
  3655. ._SETUP:
  3656.     DC.B    '_setup',0
  3657. ._CLEANUP:
  3658.     DC.B    '_cleanup',0
  3659. ._DELMEM:
  3660.     DC.B    '_delmem',0
  3661. ._STKSIZE:
  3662.     DC.B    '_stksize',0
  3663.     EVEN
  3664. ;*-*
  3665. ;; subcodes
  3666. ;; Fill
  3667. .x81_FILL:
  3668.     LSL.L   #2,D0
  3669.     ADD.L   D0,A1
  3670.     MOVE.L  (A1)+,D2
  3671.     SUBQ.L  #1,D2
  3672. .x81_FILL_LOOP:
  3673.     MOVE.L  A0,A4
  3674.     ADD.L   (A1)+,A4
  3675.     MOVE.L  D1,(A4)
  3676.     DBF D2,.x81_FILL_LOOP
  3677.     BRA .X_LOOP
  3678. ;*-*
  3679. ;; SETUP
  3680. .x81_SETUP:
  3681.     LSL.L   #2,D0
  3682.     ADD.L   D0,A1
  3683.     MOVE.L  (A1)+,D2
  3684.     SUBQ.L  #1,D2
  3685. .x81_SETUP_LOOP:
  3686.     MOVE.L  A0,A4
  3687.     ADD.L   (A1)+,A4
  3688.     MOVEQ   #5,D0
  3689.     MOVEm.L  D1/A0,-(A7)
  3690.     JSR ADDBRANCHRELOC
  3691.     MOVEm.L  (a7)+,d1/a0
  3692.     DBF D2,.x81_SETUP_LOOP
  3693.     BRA .X_LOOP
  3694. ;*-*
  3695. ;; CLEANUP
  3696. .x81_CLEANUP:
  3697.     LSL.L   #2,D0
  3698.     ADD.L   D0,A1
  3699.     MOVE.L  (A1)+,D2
  3700.     SUBQ.L  #1,D2
  3701.     BSET    #6,ICODEPREFS+3
  3702. .x81_CLEANUP_LOOP:
  3703.     MOVE.L  A0,A4
  3704.     ADD.L   (A1)+,A4
  3705.     MOVEQ   #8,D0
  3706.     MOVEm.L  D1/A0,-(A7)
  3707.     JSR ADDBRANCHRELOC
  3708.     MOVEm.L  (a7)+,d1/a0
  3709.     DBF D2,.x81_CLEANUP_LOOP
  3710.     BRA .X_LOOP
  3711. ;*-*
  3712. ;; DELMEM
  3713. .x81_DELMEM:
  3714.     LSL.L   #2,D0
  3715.     ADD.L   D0,A1
  3716.     MOVE.L  (A1)+,D2
  3717.     SUBQ.L  #1,D2
  3718. .x81_DELMEM_LOOP:
  3719.     MOVE.L  A0,A4
  3720.     ADD.L   (A1)+,A4
  3721.     MOVE.L  TOTALDELSIZE(PC),(A4)
  3722.     DBF D2,.x81_DELMEM_LOOP
  3723.     BRA .X_LOOP
  3724. ;*-*
  3725. ;; STKSIZE
  3726. .x81_STKSIZE:
  3727.     LSL.L   #2,D0
  3728.     ADD.L   D0,A1
  3729.     MOVE.L  (A1)+,D2
  3730.     SUBQ.L  #1,D2
  3731.     MOVE.L  TOTALDELSIZE(PC),D1
  3732.     ADD.L   MINSTACK,D1
  3733.     ADD.L   GLOBSTACK,D1
  3734.     BSR .x81_STKSIZE_CHECK
  3735. .x81_STKSIZE_LOOP:
  3736.     MOVE.L  A0,A4
  3737.     ADD.L   (A1)+,A4
  3738.     MOVE.L  D1,(A4)
  3739.     DBF D2,.x81_STKSIZE_LOOP
  3740.     BRA .X_LOOP
  3741.  
  3742. .x81_STKSIZE_CHECK:
  3743.     MOVE.L  CODESTACK,D3
  3744.     BEQ     .x81_STKSIZE_EXIT2
  3745.     CMP.L   D1,D3
  3746.     BPL.S   .x81_STKSIZE_CHECK2
  3747.     BSET    #2,WARNINGS+3
  3748. .x81_STKSIZE_CHECK2:
  3749.     ADD.L   #4000,D1
  3750.     CMP.L   D1,D3
  3751.     BPL.S   .x81_STKSIZE_EXIT
  3752.     BSET    #1,WARNINGS+3
  3753.     BCLR    #2,WARNINGS+3
  3754. .x81_STKSIZE_EXIT:
  3755.     RTS
  3756. .x81_STKSIZE_EXIT2:
  3757.     ADD.L   #MINSTACKSIZE,D1
  3758.     RTS
  3759. ;*-*
  3760. ;*-*
  3761. ;*-*
  3762. ;; x83
  3763. .x83:
  3764.     MOVE.W  NRGLOB,D1
  3765.     LEA ._STKFRAME(PC),A2
  3766.     BSR .CHECKNAME
  3767.     TST.L   D2
  3768.     BNE .x83_FILL
  3769.  
  3770.     MOVEQ   #-44,D1
  3771.     LEA .DBASE(PC),A2
  3772.     BSR .CHECKNAME
  3773.     TST.L   D2
  3774.     BNE .x83_FILL
  3775.  
  3776.     MOVEQ   #-48,D1
  3777.     LEA .IBASE(PC),A2
  3778.     BSR .CHECKNAME
  3779.     TST.L   D2
  3780.     BNE .x83_FILL
  3781.  
  3782.     MOVEQ   #-52,d1
  3783.     LEA .GBASE(PC),A2
  3784.     BSR .CHECKNAME
  3785.     TST.L   D2
  3786.     BNE .x83_FILL
  3787.  
  3788.     MOVEQ   #-8,d1
  3789.     LEA .SOUT(PC),A2
  3790.     BSR .CHECKNAME
  3791.     TST.L   D2
  3792.     BNE .x83_FILL
  3793.  
  3794.     MOVEQ   #-16,d1
  3795.     LEA .SRAST(PC),A2
  3796.     BSR .CHECKNAME
  3797.     TST.L   D2
  3798.     BNE .x83_FILL
  3799.  
  3800.     MOVEQ   #-32,d1
  3801.     LEA .ARG(PC),A2
  3802.     BSR .CHECKNAME
  3803.     TST.L   D2
  3804.     BNE .x83_FILL
  3805.  
  3806.     MOVEQ   #-36,d1
  3807.     LEA .WBMSG(PC),A2
  3808.     BSR .CHECKNAME
  3809.     TST.L   D2
  3810.     BNE .x83_FILL
  3811.  
  3812.     MOVEQ   #-56,D1
  3813.     LEA .SBBASE(PC),A2
  3814.     BSR .CHECKNAME
  3815.     TST.L   D2
  3816.     BNE .x83_FILL
  3817.  
  3818.     MOVEQ   #-60,D1
  3819.     LEA .STBASE(PC),A2
  3820.     BSR .CHECKNAME
  3821.     TST.L   D2
  3822.     BNE .x83_FILL
  3823.  
  3824.     MOVE.L  #-96,D1
  3825.     LEA .XCPI(PC),A2
  3826.     BSR .CHECKNAME
  3827.     TST.L   D2
  3828.     BNE .x83_FILL
  3829.  
  3830.     MOVE.L  #-92,D1
  3831.     LEA .SIN(PC),A2
  3832.     BSR .CHECKNAME
  3833.     TST.L   D2
  3834.     BNE .x83_FILL
  3835.  
  3836.     MOVE.L  #-120,D1
  3837.     LEA .POOL(PC),A2
  3838.     BSR .CHECKNAME
  3839.     TST.L   D2
  3840.     BNE .x83_FILL
  3841.  
  3842.     MOVE.L  #-124,D1
  3843.     LEA .UBASE(PC),A2
  3844.     BSR .CHECKNAME
  3845.     TST.L   D2
  3846.     BNE .x83_FILL
  3847.  
  3848.     MOVE.L  #-4,D1
  3849.     LEA .STKRET(PC),A2
  3850.     BSR .CHECKNAME
  3851.     TST.L   D2
  3852.     BNE .x83_FILL
  3853.  
  3854.     MOVE.L  #-20,D1
  3855.     LEA .MEMLIST(PC),A2
  3856.     BSR .CHECKNAME
  3857.     TST.L   D2
  3858.     BNE .x83_FILL
  3859.  
  3860.     MOVE.L  #-24,D1
  3861.     LEA .EXITCODE(PC),A2
  3862.     BSR .CHECKNAME
  3863.     TST.L   D2
  3864.     BNE .x83_FILL
  3865.  
  3866.     MOVE.L  #-40,D1
  3867.     LEA .EBASE(PC),A2
  3868.     BSR .CHECKNAME
  3869.     TST.L   D2
  3870.     BNE .x83_FILL
  3871.  
  3872.     MOVE.L  #-28,D1
  3873.     LEA .RETVAL(PC),A2
  3874.     BSR .CHECKNAME
  3875.     TST.L   D2
  3876.     BNE .x83_FILL
  3877.  
  3878.     MOVE.L  #-64,D1
  3879.     LEA .BTMSTK(PC),A2
  3880.     BSR .CHECKNAME
  3881.     TST.L   D2
  3882.     BNE .x83_FILL
  3883.  
  3884.     MOVE.L  #-128,D1
  3885.     LEA .FILELIST(PC),A2
  3886.     BSR .CHECKNAME
  3887.     TST.L   D2
  3888.     BNE .x83_FILL
  3889.  
  3890.     MOVEQ   #0,D1
  3891.     MOVE.W  OSVERSION,D1
  3892.     LEA .OSVERSION(PC),A2
  3893.     BSR .CHECKNAME
  3894.     TST.L   D2
  3895.     BNE .x83_FILL
  3896.  
  3897.     MOVE.W  ASMCPU,D1
  3898.     LEA .CPUFLAGS(PC),A2
  3899.     BSR .CHECKNAME
  3900.     TST.L   D2
  3901.     BNE .x83_FILL
  3902.  
  3903.     CLR.W   ERRWHERE
  3904.     BRA ERROR42
  3905. ;; names
  3906. .STKRET:
  3907.     DC.B    '_stkreturn',0
  3908. .MEMLIST:
  3909.     Dc.b    '_memlist',0
  3910. .EXITCODE:
  3911.     DC.B    '_exitcode',0
  3912. .BTMSTK:
  3913.     dc.b    '_bottomstk',0
  3914. .FILELIST:
  3915.     DC.B    '_filelist',0
  3916. .RETVAL:
  3917.     DC.B    '_clireturnvalue',0
  3918. ._STKFRAME:
  3919.     DC.B    '_stkframe',0
  3920. .DBASE:
  3921.     DC.B    '_dosbase',0
  3922. .IBASE:
  3923.     DC.B    '_intuitionbase',0
  3924. .GBASE:
  3925.     DC.B    '_gfxbase',0
  3926. .EBASE:
  3927.     DC.B    '_execbase',0
  3928. .SOUT:
  3929.     DC.B    '_stdout',0
  3930. .SRAST:
  3931.     DC.B    '_stdrast',0
  3932. .ARG:
  3933.     DC.B    '_arg',0
  3934. .WBMSG:
  3935.     DC.B    '_wbmessage',0
  3936. .SBBASE:
  3937.     DC.B    '_mathieeesingbasbase',0
  3938. .STBASE:
  3939.     DC.B    '_mathieeesingtransbase',0
  3940. .XCP:
  3941.     DC.B    '_exception',0
  3942. .XCPI:
  3943.     Dc.B    '_exceptioninfo',0
  3944. .SIN:
  3945.     DC.B    '_stdin',0
  3946. .UBASE:
  3947.     DC.B    '_utilitybase',0
  3948. .POOL:
  3949.     DC.B    '_pool',0
  3950. .OSVERSION:
  3951.     DC.B    '_osversion',0
  3952. .CPUFLAGS:
  3953.     DC.B    '_cpuflags',0
  3954.     EVEN
  3955. ;*-*
  3956. ;; subcode(s)
  3957. ;; Fill
  3958. .x83_FILL:
  3959.     LSL.L   #2,D0
  3960.     ADD.L   D0,A1
  3961.     MOVE.L  (A1)+,D2
  3962.     SUBQ.L  #1,D2
  3963. .x83_FILL_LOOP:
  3964.     MOVE.L  A0,A4
  3965.     ADD.L   (A1)+,A4
  3966.     MOVE.W  D1,(A4)
  3967.     DBF D2,.x83_FILL_LOOP
  3968.     BRA .X_LOOP
  3969. ;*-*
  3970. ;*-*
  3971. ;*-*
  3972. ;*-*
  3973. ;*-*
  3974.  
  3975. ;; background
  3976. BGCODE:
  3977.     bra     dobg
  3978. BGS:
  3979.     MOVE.L  $4.W,A6
  3980.     move.l  a0,a5
  3981.     move.l  d0,d7
  3982.     SUB.L   A1,A1
  3983.     JSR -294(A6)
  3984.     MOVE.L  D0,A1
  3985.     TST.L   $AC(A1)
  3986.     BNE.S   BGRUNCODE
  3987. BGFILL:
  3988.     DC.W    $4EF9,0,0
  3989. BGRUNCODE
  3990.     LEA BGS(PC),A1          ; start of next hunk
  3991.     MOVE.L  -(A1),D3            ; pick and
  3992.     CLR.L   (A1)                ; clear
  3993.     LEA     $17A(A6),A0         ; find dos.library
  3994.     LEA     DOSNAME(PC),A1
  3995.     JSR     -276(A6)
  3996.     move.l  d0,-(a7)            ; and store
  3997.     LEA     BGTAGS(PC),A4      ;
  3998.     MOVE.L  A4,D6
  3999.     BRA.S   BGSKIP
  4000. BGTAGS:
  4001.     DC.L    $800003e9,0    ; seglist
  4002.     DC.L    $800003fd,0    ; args
  4003.     DC.L    $800003fA,1    ; cli
  4004.     DC.L    $00000000,0    ; tag_done
  4005. BGSKIP:
  4006.     ADDQ.L  #4,A4
  4007.     MOVE.L  D3,(A4)+
  4008.     ADDQ.L  #4,A4
  4009.     MOVE.L  A5,(A4)+
  4010.     MOVE.L  D6,D1
  4011.     MOVE.L  (A7)+,A6
  4012.     JSR     -498(a6)
  4013.     moveq   #0,d0
  4014.     rts
  4015. DOSNAME:
  4016.     dc.b    'dos.library',0,0,0
  4017.     even
  4018. BGE:
  4019.  
  4020. dobg:
  4021.     LEA BGS(PC),A0
  4022.     MOVE.L #BGFILL,D0
  4023.     ADDQ.L #2,D0
  4024.     BSR COPYC
  4025.     MOVE.L #BGE-BGS,D0
  4026.     TST.L   bgName
  4027.     BEQ .bg1
  4028.     ADDQ.L  #8,D0
  4029. .bg1:
  4030.     TST.L   bgPri
  4031.     BEQ .bg2
  4032.     ADDQ.L  #8,D0
  4033. .bg2:
  4034.     MOVE.L  D0,D7
  4035.     MOVE.L A0,-(A7)
  4036.     JSR FORCEABSHERE
  4037.     MOVE.L (A7)+,A0
  4038.     ADDQ.L  #4,A0
  4039.     MOVE.L  #BGTAGS+24,D0
  4040.     BSR COPYC
  4041.     MOVE.L  A4,A6
  4042.     SUB.L   #25,A6
  4043.  
  4044.     TST.L   bgName
  4045.     BEQ     .dobg2
  4046.     MOVE.L  #$80000000+1012,(a4)+
  4047.     MOVE.L  D7,D0
  4048.     ADD.L   #ENDC-FIRSTSTART,D0
  4049.     ADDQ.B  #8,(A6)
  4050.     ADDQ.W  #8,-15(A6)
  4051.     MOVE.L  A0,-(A7)
  4052.     JSR FORCEABSHERE
  4053.     MOVE.L  (A7)+,A0
  4054. .dobg2:
  4055.     TST.L   bgPri
  4056.     BEQ     .dobg3
  4057.     MOVE.L  #$80000000+1013,(a4)+
  4058.     ADDQ.B  #8,(A6)
  4059.     ADDQ.W  #8,-15(A6)
  4060.     move.l  bgPri(PC),(A4)+
  4061. .dobg3:
  4062.     MOVE.L #BGE,D0
  4063.     BSR COPYC
  4064.  
  4065.     MOVE.L HunkList(PC),A0
  4066.     MOVE.L A4,H_END(A0)
  4067.     MOVE.L A0,D0
  4068.     ADDQ.L #1,NumHunks
  4069.  
  4070.     GETM    A0                  ; fill the 0-hunk structure!
  4071.     MOVE.L  HunkList(PC),(A0)+  ;
  4072.     MOVE.L  A0,HunkList         ;
  4073.     EXG.L   A0,D0
  4074.     MOVE.L  D0,H_PREV(A0)
  4075.     EXG.L   A0,D0
  4076.     MOVE.L  A4,(A0)+            ; start
  4077.     MOVE.L  #$3e9,(A0)+         ; type
  4078.     clr.l   (a0)+               ; end
  4079.     clr.l   (a0)+               ; prev
  4080.     clr.l   (a0)+               ; reloc
  4081.     DONEM   A0                  ; We'll use it for writing the stuff :)
  4082.     RTS
  4083. ;*-*
  4084.  
  4085. A4STORAGEADR:
  4086.     DC.L    A4STORAGE_NOST-NSFIRSTSTART
  4087.  
  4088. ; NEEDS TO GEN T/F IN D2
  4089. ;; Additional code - init
  4090. MATHINITETC:          ; A4=CODE
  4091.     BTST    #5,CODEPREFS
  4092.     BEQ     ._1
  4093.     RTS
  4094. ._1:
  4095.     BTST    #6,ICODEPREFS+3
  4096.     BNE .0
  4097.     BTST    #2,CODEPREFS
  4098.     BEQ.S   .0
  4099.     RTS
  4100. .0: MOVE.W  .T(PC),(A4)+
  4101.     BTST    #3,CODEPREFS+1
  4102.     BEQ.S   .1
  4103.     LEA OPENMATHBAS(PC),A0
  4104.     MOVE.L  #OPENBASEND,D0
  4105.     BSR CCOPY
  4106. .1: BTST    #4,CODEPREFS+1
  4107.     BEQ.S   .2
  4108.     LEA OPENMATHTRANS(PC),A0
  4109.     MOVE.L  #OPENTRANSEND,D0
  4110.     BSR CCOPY
  4111. .2: BTST    #7,CODEPREFS
  4112.     BEQ     .3
  4113.     BTST    #4,CODEPREFS
  4114.     BNE     ERROR50
  4115.     LEA OPENUTIL(PC),A0
  4116.     MOVE.L  #OPENUTILEND,D0
  4117.     BSR CCOPY
  4118. .3: BTST    #6,CODEPREFS
  4119.     BEQ     .4
  4120.     BTST    #4,CODEPREFS
  4121.     BNE     ERROR50
  4122.     LEA OPENPOOL(PC),A0
  4123.     MOVE.L  #OPENPOOLEND,D0
  4124.     BSR CCOPY
  4125. .4: BTST    #3,CODEPREFS
  4126.     BEQ     .5
  4127.     LEA OPENFILES(PC),A0
  4128.     MOVE.L  #OPENFILESEND,D0
  4129.     BSR CCOPY
  4130. .5: CMP.W   #37,OSVERSION
  4131.     BLT     .6
  4132.     BTST    #4,CODEPREFS
  4133.     BNE     .6
  4134.     LEA OPENCON37P(PC),A0
  4135.     MOVE.L  #OPENCON37PEND,D0
  4136.     BSR CCOPY
  4137. .6: TST.W   ASMCPU
  4138.     BEQ     .7
  4139.     BTST    #4,CODEPREFS
  4140.     BNE     .7
  4141.     LEA CHECK_CPU_FPU(PC),A0
  4142.     MOVE.W  ASMCPU,2(A0)
  4143.     MOVE.L  #LK0000,D0
  4144.     BSR CCOPY
  4145.     JSR NEWLABEL
  4146.     JSR ADDBRANCH
  4147.     MOVE.L D0,-(A7)
  4148.     LEA LK0000(PC),A0
  4149.     MOVE.L  #CHECK_CPU_FPU_END,D0
  4150.     BSR CCOPY
  4151.     BSR ADDERR
  4152.     MOVE.L (A7)+,D0
  4153.     JSR ADDLABEL
  4154. .7: BTST    #0,CODEPREFS+2
  4155.     BEQ     .8
  4156.     BTST    #4,CODEPREFS
  4157.     BNE     .8
  4158.     LEA CHECK_OSVERSION(PC),A0
  4159.     MOVE.W  OSVERSION,2(A0)
  4160.     MOVE.L  #LK0001,D0
  4161.     BSR CCOPY
  4162.     JSR NEWLABEL
  4163.     JSR ADDBRANCH
  4164.     MOVE.L D0,-(A7)
  4165.     LEA LK0001(PC),A0
  4166.     MOVE.L  #CHECK_OSVERSION_END,D0
  4167.     BSR CCOPY
  4168.     BSR ADDERR
  4169.     MOVE.L (A7)+,D0
  4170.     JSR ADDLABEL
  4171. .8: BTST    #0,CODEPREFS
  4172.     BEQ     .9
  4173.     LEA OPEN_POWERPC(PC),A0
  4174.     MOVE.L  #OPEN_POWERPC_END,D0
  4175.     BSR CCOPY
  4176.     BSR ADDERR
  4177. .9:
  4178.     LEA  SetupMod+4(PC),A0
  4179. .A: MOVE.L  -4(A0),D0
  4180.     BEQ     .C
  4181.     MOVE.L  D0,A0
  4182.     MOVE.W  .U(PC),(A4)+
  4183.     MOVE.L  A0,-(A7)
  4184.     MOVE.L  (A0),A0
  4185.     MOve.L  14(A0),A0
  4186.     MOVEQ   #0,D0
  4187.     MOVE.W  10(A0),D0
  4188.     JSR     ADDBRANCHRELOC
  4189.     MOVE.L  (A7)+,A0
  4190.     BRA     .A
  4191. .C:
  4192.     RTS
  4193. .T: MOVEQ   #-1,D2
  4194. .U: JSR     .U
  4195.  
  4196. ADDERR:
  4197.     MOVE.W  InitError(PC),D0
  4198.     BNE.S   .AddErr2
  4199.     JSR     NEWLABEL
  4200.     MOVE.W  D0,InitError
  4201. .AddErr2:
  4202.     MOVE.W  .JSR,NEWOP
  4203. .JSR:
  4204.     JSR     ADDBRANCH
  4205.     RTS
  4206. ADDERRCODE:
  4207.     MOVE.W  InitError,D0
  4208.     BEQ     .EXIT
  4209.     JSR     ADDLABEL
  4210.     LEA     InitializationError(PC),A0
  4211.     MOVe.L  #InitializationErrorEnd,D0
  4212.     BSR     CCOPY
  4213. .EXIT:
  4214.     RTS
  4215. ;*-*
  4216. ;; Additional code - exit
  4217. MATHEXITETC:
  4218.     TSTMOD
  4219.     BNE .EX
  4220.     BTST    #5,CODEPREFS
  4221.     BNE .EX
  4222.     BTST    #6,ICODEPREFS+3
  4223.     BNE .0
  4224.     BTST    #2,CODEPREFS
  4225.     BNE .EX
  4226. .0:
  4227.     MOVE.L  CURACODE,A4     ; A4=CODE
  4228.     MOVEQ   #8,D0
  4229.     JSR ADDLABEL
  4230.  
  4231.     
  4232.     LEA  CleanupMod+4(PC),A0
  4233. .8: MOVE.L  -4(A0),D0
  4234.     BEQ     .9
  4235.     MOVE.L  D0,A0
  4236.     MOVE.W  .JSR(PC),(A4)+
  4237.     MOVE.L  A0,-(A7)
  4238.     MOVE.L  (A0),A0
  4239.     MOve.L  14(A0),A0
  4240.     MOVEQ   #0,D0
  4241.     MOVE.W  10(A0),D0
  4242.     JSR     ADDBRANCHRELOC
  4243.     MOVE.L  (A7)+,A0
  4244.     BRA     .8
  4245. .9:
  4246.  
  4247.  
  4248.     BTST    #3,CODEPREFS+1
  4249.     BEQ.S   .1
  4250.     LEA CLOSEMATHBAS(PC),A0
  4251.     MOVE.L  #CLOSEBASEND,D0
  4252.     BSR CCOPY
  4253. .1: BTST    #4,CODEPREFS+1
  4254.     BEQ.S   .2
  4255.     LEA CLOSEMATHTRANS(PC),A0
  4256.     MOVE.L  #CLOSETRANSEND,D0
  4257.     BSR CCOPY
  4258. .2: BTST    #7,CODEPREFS
  4259.     BEQ     .3
  4260.     BTST    #4,CODEPREFS
  4261.     BNE     ERROR50
  4262.     LEA CLOSEUTIL(PC),A0
  4263.     MOVE.L  #CLOSEUTILEND,D0
  4264.     BSR CCOPY
  4265. .3: BTST    #6,CODEPREFS
  4266.     BEQ     .4
  4267.     BTST    #4,CODEPREFS
  4268.     BNE     ERROR50
  4269.     LEA CLOSEPOOL(PC),A0
  4270.     MOVE.L  #CLOSEPOOLEND,D0
  4271.     BSR CCOPY
  4272. .4: BTST    #3,CODEPREFS
  4273.     BEQ     .5
  4274.     LEA CLOSEFILES(PC),A0
  4275.     MOVE.L  #CLOSEFILESEND,D0
  4276.     BSR CCOPY
  4277. .5: CMP.W   #37,OSVERSION
  4278.     BLT     .5_5
  4279.     LEA CLOSECON37P(PC),A0
  4280.     MOVE.L  #CLOSECON37PEND,D0
  4281.     BSR CCOPY
  4282.     BRA .6
  4283. .5_5:
  4284.     LEA CLOSECON33_37(PC),A0
  4285.     MOVE.L  #CLOSECON33_37END,D0
  4286.     BSR CCOPY
  4287. .6: BTST    #0,CODEPREFS
  4288.     BEQ     .7
  4289.     LEA CLOSE_POWERPC(PC),A0
  4290.     MOVE.L  #CLOSE_POWERPC_END,D0
  4291.     BSR CCOPY
  4292. .7:
  4293.     MOVE.W  .RTS(PC),(A4)+
  4294.     BSR     ADDERRCODE
  4295.     MOVE.L  A4,CURACODE
  4296.     JSR CHECK3
  4297. .EX:
  4298. .RTS:   RTS
  4299. .JSR:   JSR .JSR
  4300. ;*-*
  4301.  
  4302. ;; Copy
  4303. CCOPY:
  4304.     SUB.L   A0,D0
  4305.     LSR.L   #1,D0
  4306.     SUBQ.L  #1,D0
  4307. .XL:MOVE.W  (A0)+,(A4)+
  4308.     DBRA    D0,.XL
  4309.     RTS
  4310. ;*-*
  4311.  
  4312. ;; Check CPU/FPU
  4313. CHECK_CPU_FPU:
  4314.     MOVE.W  #0,D0
  4315.     BRA.S   LM1
  4316. LM0:DC.B    'This program requires a better CPU/FPU',10,0
  4317. LM1:MOVE.L  $4.W,A6
  4318.     AND.W   296(A6),D0
  4319.     BNE     CHECK_CPU_FPU_END
  4320. LK0000:
  4321.     LEA     LM0(PC),A0
  4322.     MOVEQ   #2,D7
  4323.     BRA     CHECK_CPU_FPU_END
  4324. CHECK_CPU_FPU_END:
  4325. ;*-*
  4326. ;; Check OSVersion
  4327. CHECK_OSVERSION:
  4328.     MOVE.W  #0,D0
  4329.     BRA.B   LM3
  4330. LM2:DC.B    'This program requires a newer OS',10,0
  4331. LM3:MOVE.L  $4.W,A6
  4332.     CMP.W   20(A6),D0
  4333.     BLE     CHECK_OSVERSION_END
  4334. LK0001:
  4335.     MOVE.L  #$38001,D7
  4336.     LEA     LM2(PC),A0
  4337.     BRA     CHECK_OSVERSION_END
  4338. CHECK_OSVERSION_END:
  4339. ;*-*
  4340. ;; OpenCon37+
  4341. OPENCON37P:
  4342.     BRA.S   .X
  4343.     DC.B    'CON:0/11/640/80/Output/AUTO/CLOSE/WAIT',0
  4344.     EVEN
  4345. .X: MOVE.L  -44(A4),A6
  4346.     LEA     OPENCON37P+2(PC),A0
  4347.     MOVE.L  A0,D1
  4348.     MOVE.L  #1006,d2
  4349.     JSR     -30(a6)
  4350.     MOVE.L  D0,-12(A4)
  4351.     TST.L   -8(A4)
  4352.     BNE.S   OPENCON37PEND
  4353.     MOVE.L  D0,-8(A4)
  4354. OPENCON37PEND:
  4355. ;*-*
  4356. ;; OpenPool
  4357. OPENPOOL:
  4358.     MOVE.L  #$10001,D0
  4359.     MOVE.L  #10240,D1
  4360.     MOVE.L  #256,D2
  4361.     MOVE.L  $4,A6
  4362.     JSR     -696(A6)
  4363.     MOVE.L  D0,-120(A4)
  4364. OPENPOOLEND:
  4365. ;*-*
  4366. ;; OpenUtil
  4367. OPENUTIL:
  4368.     BRA.S   OPENUTIL2
  4369. UTILNAME:
  4370.     DC.B    "utility.library",0
  4371.     EVEN
  4372. OPENUTIL2:
  4373.     MOVE.L  $4.W,A6
  4374.     LEA UTILNAME(PC),A1
  4375.     MOVEQ   #33,D0
  4376.     JSR -552(A6)
  4377.     MOVE.L  D0,-124(A4)
  4378.     BNE.S   OPENUTILEND
  4379.     MOVEQ   #0,D2
  4380. OPENUTILEND:
  4381. ;*-*
  4382. ;; OpenMathBas
  4383. OPENMATHBAS:
  4384.     BRA.S   BASCONT
  4385. INITMATH:
  4386.     DC.B    "mathieeesingbas.library",0
  4387.     EVEN
  4388. BASCONT:
  4389.     MOVE.L  4.W,A6
  4390.     LEA INITMATH(PC),A1
  4391.     MOVEQ   #33,D0
  4392.     JSR -552(A6)
  4393.     MOVE.L  D0,-56(A4)
  4394.     BNE.S   OPENBASEND
  4395.     MOVEQ   #0,D2
  4396. OPENBASEND:
  4397. ;*-*
  4398. ;; OpenMathTrans
  4399. OPENMATHTRANS:
  4400.     BRA.S   TRANSCONT
  4401. INITMATHT:
  4402.     DC.B    "mathieeesingtrans.library",0
  4403.     EVEN
  4404. TRANSCONT:
  4405.     MOVE.L  4.W,A6
  4406.     LEA INITMATHT(PC),A1
  4407.     MOVEQ   #33,D0
  4408.     JSR -552(A6)
  4409.     MOVE.L  D0,-60(A4)
  4410.     BNE.S   OPENTRANSEND
  4411.     MOVEQ   #0,D2
  4412. OPENTRANSEND:
  4413. ;*-*
  4414. ;; OpenFiles
  4415. OPENFILES:
  4416.     CLR.L   -128(A4)
  4417. OPENFILESEND:
  4418. ;*-*
  4419. ;; OpenPowerPC
  4420. OPEN_POWERPC:
  4421.     LEA .LB(PC),A1
  4422.     MOVEQ   #0,D0
  4423.     MOVE.L  $4.W,A6
  4424.     JSR -552(A6)
  4425.     MOVE.L  D0,-132(a4)
  4426.     BNE.S   OPEN_POWERPC_END
  4427.     BRA.S   .X
  4428. .M: DC.B    'This program requires '
  4429. .LB:DC.B    'powerpc.library'
  4430. .Z: DC.B    0,0,0
  4431. .X: LEA     .M(PC),A0
  4432.     LEA     .Z(PC),A1
  4433.     MOVE.B  #10,(A1)
  4434.     BRA     OPEN_POWERPC_END
  4435. OPEN_POWERPC_END:
  4436. ;*-*
  4437.  
  4438. ;; InitError
  4439. InitializationError:
  4440.     TST.L   -8(A4)
  4441.     BEQ.S   .ALERT
  4442.     MOVE.L  A0,D2
  4443. .c: TST.B   (A0)+
  4444.     BNE     .c
  4445.     MOVe.L  A0,D3
  4446.     SUB.L   D2,D3
  4447.     MOVe.L  -8(A4),D1
  4448.     MOVE.L  -44(A4),A6
  4449.     JSR     -48(A6)
  4450.     BRA.S   .QUIT
  4451. .ALERT:
  4452.     MOVE.L  -40(A4),A6
  4453.     JSR     -108(A6)
  4454. .QUIT:
  4455.     MOVE.L  -24(A4),A0
  4456.     move.l  #20,-28(a4)
  4457.     JMP     (A0)
  4458. InitializationErrorEnd:
  4459. ;*-*
  4460.  
  4461. ;; ClosePool
  4462. CLOSEPOOL:
  4463.     MOVE.L  $4.W,A6
  4464.     MOVE.L  -120(A4),A0
  4465.     JSR     -702(A6)
  4466. CLOSEPOOLEND:
  4467. ;*-*
  4468. ;; CloseUtil
  4469. CLOSEUTIL:
  4470.     MOVE.L $4.W,A6
  4471.     MOVE.L -124(A4),D0
  4472.     BEQ CLOSEUTILEND
  4473.     MOVE.L D0,A1
  4474.     JSR -414(A6)
  4475. CLOSEUTILEND:
  4476. ;*-*
  4477. ;; CloseMathBas
  4478. CLOSEMATHBAS:
  4479.     MOVE.L  4.W,A6
  4480.     MOVE.L  -56(A4),D0
  4481.     BEQ.S   CLOSEBASEND
  4482.     MOVE.L  D0,A1
  4483.     JSR -414(A6)
  4484. CLOSEBASEND:
  4485. ;*-*
  4486. ;; CloseMathTrans
  4487. CLOSEMATHTRANS:
  4488.     MOVE.L  4.W,A6
  4489.     MOVE.L  -60(A4),D0
  4490.     BEQ.S   CLOSETRANSEND
  4491.     MOVE.L  D0,A1
  4492.     JSR -414(A6)
  4493. CLOSETRANSEND:
  4494. ;*-*
  4495. ;; CloseFiles
  4496. CLOSEFILES:
  4497.     move.l  -128(a4),d0
  4498.     beq     CLOSEFILESEND
  4499. .1: move.l  d0,a0
  4500.     move.l  (a0),d4
  4501.     move.l  4(a0),d5
  4502.     move.l  a0,a1
  4503.     moveq   #8,d0
  4504.     move.l  -40(a4),a6
  4505.     jsr     -210(a6)
  4506.     move.l  d5,d1
  4507.     move.l  -44(a4),a6
  4508.     jsr     -36(a6)
  4509.     move.l  d4,d0
  4510.     bne     .1
  4511. CLOSEFILESEND:
  4512. ;*-*
  4513. ;; CloseCon37+
  4514. CLOSECON37P:
  4515.     MOVE.L  -12(A4),D1
  4516.     BEQ     CLOSECON37PEND
  4517.     MOVE.L  -44(a4),A6
  4518.     JSR     -36(A6)
  4519.     CLR.L   -12(A4)
  4520. CLOSECON37PEND:
  4521. ;*-*
  4522. ;; CloseCon33-37
  4523. CLOSECON33_37:
  4524.     MOVE.L  -12(A4),D1
  4525.     BEQ     CLOSECON33_37END
  4526.     MOVE.L  -44(a4),A6
  4527.     MOVE.L  D1,D4
  4528.     MOVEQ   #0,D2
  4529.     MOVEQ   #0,D3
  4530.     JSR     -42(A6)
  4531.     MOVE.L  D4,D1
  4532.     JSR     -36(A6)
  4533.     CLR.L   -12(A4)
  4534. CLOSECON33_37END:
  4535. ;*-*
  4536. ;; ClosePowerPC
  4537. CLOSE_POWERPC:
  4538.     MOVE.L $4.W,A6
  4539.     MOVE.L -132(A4),A1
  4540.     JSR -414(A6)
  4541. CLOSE_POWERPC_END:
  4542. ;*-*
  4543.  
  4544. ;; Add global vars
  4545. ADDGLOBVARS:
  4546.     BTST    #3,CODEPREFS+3
  4547.     BEQ.S   .C
  4548.     RTS
  4549. .C: GETM    A5
  4550.     LEA GLOBVARTAB(PC),A4
  4551. .1: MOVE.L  (A4)+,D7
  4552.     MOVE.L  (A4)+,D6
  4553.     BEQ     .2
  4554.     CMP.L   #GLOBVARTAB+24,A4
  4555.     BNE.S   .NARG
  4556.     LEA 9(A5),A1
  4557.     MOVE.L  A1,ARGBYTE
  4558. .NARG:
  4559.     CMP.L   #GLOBVARTAB+32,A4
  4560.     BNE.S   .NEXC
  4561.     MOVE.L  A5,VAR_EXECBASE
  4562.     ADDQ.L  #4,VAR_EXECBASE
  4563. .NEXC:
  4564.     CMP.L   #GLOBVARTAB+40,A4
  4565.     BNE.S   .NDOS
  4566.     MOVE.L  A5,VAR_DOSBASE
  4567.     ADDQ.L  #4,VAR_DOSBASE
  4568. .NDOS:
  4569.     CMP.L   #GLOBVARTAB+48,A4
  4570.     BNE.S   .NINT
  4571.     MOVE.L  A5,VAR_INTUIBASE
  4572.     ADDQ.L  #4,VAR_INTUIBASE
  4573. .NINT:
  4574.     CMP.L   #GLOBVARTAB+56,A4
  4575.     BNE.S   .NGFX
  4576.     MOVE.L  A5,VAR_GFXBASE
  4577.     ADDQ.L  #4,VAR_GFXBASE
  4578. .NGFX:
  4579.     CMP.L   #GLOBVARTAB+64,A4
  4580.     BNE.S   .NRST
  4581.     MOVE.L  A5,VAR_RASTPORT
  4582.     ADDQ.L  #4,VAR_RASTPORT
  4583. .NRST:
  4584.     CMP.L   #GLOBVARTAB+72,A4
  4585.     BNE.S   .NWBM
  4586.     MOVE.L  A5,VAR_WBMESSAGE
  4587.     ADDQ.L  #4,VAR_WBMESSAGE
  4588. .NWBM:
  4589. .FILL:
  4590.     MOVE.L  D7,A1
  4591.     HASH    A1,D0,D1
  4592.     LSL.L   #2,D0
  4593.     MOVE.L  #IDENTHASH,A1
  4594.     ADD.L   D0,A1
  4595.     MOVE.L  (A1),(A5)+
  4596.     MOVE.L  A5,(A1)
  4597.  
  4598.     MOVE.L  #PSEUDOA4,A1
  4599.     MOVE.L  A5,(A1,D6)
  4600.  
  4601.     MOVE.L  D7,(A5)+        ; SET ASCIIPTR
  4602.     MOVE.B  #GLOBV,(A5)+    ; SET GLOBAL(=2)
  4603.     MOVE.B  #2,(A5)+        ; UNREF+SYSTEMVAR
  4604.     CLR.L   (A5)+
  4605.     MOVE.W  D6,(A5)+        ; SET OFFS
  4606.     BRA     .1
  4607. .2: DONEH   A5
  4608. ;*-*
  4609. ;; Add global consts
  4610. BURP:   MOVEQ   #NRSYSCONST,D0
  4611.     SUBQ.W  #1,D0
  4612.     GETM    A0
  4613.     LEA SYSCONST(PC),A1
  4614. .3: MOVE.L  (A1)+,A2
  4615.     MOVE.L  A2,A3
  4616.     HASH    A3,D1,D2
  4617.     LSL.L   #2,D1
  4618.     ADD.L   #CONSTHASH,D1
  4619.     MOVE.L  D1,A3
  4620.     MOVE.L  (A3),(A0)
  4621.     MOVE.L  A0,(A3)
  4622.     ADDQ.L  #4,A0
  4623.     MOVE.L  A2,(A0)+
  4624.     CMPA.L  #SYSCONST+36,A1
  4625.     BNE.S   .SL
  4626.     MOVE.L  A0,STRLENADR
  4627. .SL:    MOVE.L  (A1)+,(A0)+
  4628.     CLR.W   (A0)+
  4629.     DBRA    D0,.3
  4630.     DONEH   A0
  4631.     RTS
  4632. ;*-*
  4633. ;; Consts
  4634. NRSYSCONST  = 20
  4635. STRLENADR:  DC.L    0
  4636.  
  4637. SYSCONST:
  4638.     DC.L    .1,-1,.2,0,.3,0,.4,-1,.5,0,.6,120,.7,1005,.8,1006,.9,0,.10,0
  4639.     DC.L    .11,0,.12,1,.13,2,.14,.3,.15,$80000000,.16,-1,.17,-1,.18,0,.19,1,.20,1004
  4640.  
  4641. .1: DC.B    "TRUE",0
  4642. .2: DC.B    "FALSE",0
  4643. .3: DC.B    "NIL",0
  4644. .4: DC.B    "ALL",0
  4645. .5: DC.B    "STRLEN",0      ; MUST BE #5
  4646. .6: DC.B    "GADGETSIZE",0
  4647. .7: DC.B    "OLDFILE",0
  4648. .8: DC.B    "NEWFILE",0
  4649. .9: DC.B    "EMPTY",0
  4650. .10:DC.B    "TAG_DONE",0
  4651. .11:DC.B    "TAG_END",0
  4652. .12:DC.B    "TAG_IGNORE",0
  4653. .13:DC.B    "TAG_MORE",0
  4654. .14:DC.B    "TAG_SKIP",0
  4655. .15:DC.B    "TAG_USER",0
  4656. .16:DC.B    "OFFSET_BEGINNING",0
  4657. .17:DC.B    "OFFSET_BEGINING",0
  4658. .18:DC.B    "OFFSET_CURRENT",0
  4659. .19:DC.B    "OFFSET_END",0
  4660. .20:DC.B    "READWRITE",0
  4661.     EVEN
  4662. ;*-*
  4663. ;; Vars
  4664. ARGBYTE:  DC.L    0       ; EXACT BYTE LOC OF "arg".FLAGS
  4665.  
  4666. GLOBVARTAB:
  4667.     DC.L    .1,-8
  4668.     DC.L    .2,-12
  4669.     DC.L    .3,-32          ; must be 16..24 bytes offset
  4670.     DC.L    .4,-40          ; must be 24..32 bytes offset!!!
  4671.     DC.L    .5,-44          ; keep the places!!!
  4672.     DC.L    .6,-48          ; _UNCHANGED_
  4673.     DC.L    .7,-52          ; those vars refer to special
  4674.     DC.L    .8,-16          ; pointers!
  4675.     DC.L    .9,-36
  4676. ;   DC.L    .10,-56
  4677.     DC.L    .11,-84
  4678.     DC.L    .12,-92
  4679.     DC.L    .13,-96
  4680.     DC.L    .14,-120
  4681.     DC.L    .15,-124
  4682.     DC.L    0,0
  4683.  
  4684. .1: DC.B    "stdout",0
  4685. .2: DC.B    "conout",0
  4686. .3: DC.B    "arg",0         ; MUST BE 3RD
  4687. .4: DC.B    "execbase",0
  4688. .5: DC.B    "dosbase",0
  4689. .6: DC.B    "intuitionbase",0
  4690. .7: DC.B    "gfxbase",0
  4691. .8: DC.B    "stdrast",0
  4692. .9: DC.B    "wbmessage",0
  4693. ;.10:   DC.B    "mathieeesingbasbase",0
  4694. .11:    DC.B    "exception",0
  4695. .12:    DC.B    "stdin",0
  4696. .13:    DC.B    "exceptioninfo",0
  4697. .14:    DC.B    "__pool",0
  4698. .15:    DC.B    "utilitybase",0
  4699.     EVEN
  4700. ;*-*
  4701.  
  4702. ;; Init funcs
  4703. INITFUNCS:            ; init efuncs
  4704.     MOVE.L  #EFUNCBYTE,A0
  4705.     MOVE.L  #EFUNCRAISE,A1
  4706.     MOVE.W  #NREFUNC,D0
  4707.     SUBQ.W  #1,D0
  4708.     MOVEQ   #0,D1
  4709. .1: MOVE.B  D1,(A0)+
  4710.     MOVE.W  D1,(A1)+
  4711.     ADDQ.L  #8,A1
  4712.     DBRA    D0,.1
  4713.     RTS
  4714. ;*-*
  4715. ;; Link delegate constructors
  4716. LINKDELEGATECONSTRUCTORS:
  4717.     LEA OLIST+4,A0
  4718. .XL:MOVE.L  -(A0),D0
  4719.     BEQ .X
  4720.     MOVE.L  D0,A0
  4721.     TST.W   ODEL(A0)
  4722.     BEQ.S   .XL
  4723.     BTST    #1,OFLAGS(A0)
  4724.     BNE.S   .XL
  4725.     MOVE.L  CURACODE,A4     ; 32K VERWEG !
  4726.     MOVE.L  A4,ODCODE(A0)       ; SET DCODE FOR THIS OBJECT
  4727.     MOVE.L  OSUPER(A0),D0
  4728.     BEQ.S   .NSUP
  4729.     MOVE.L  D0,A2           ; A2=SUPER
  4730.     TST.W   (A2)            ; CHECK IF SUPER HAS DELCONSTRUCTOR
  4731.     BEQ.S   .NSUP
  4732.     GETM    A1
  4733.     MOVE.L  OACC(A2),(A1)       ; ADD TO ACCESSLIST OF SUPER
  4734.     MOVE.L  A1,OACC(A2)
  4735.     ADDQ.L  #4,A1
  4736.     MOVE.W  .J(PC),(A4)+        ; MAKE JSR SUPERDELEGATECONSTR.
  4737.     MOVE.L  A4,(A1)+
  4738.     MOVE.W  #1,(A1)+
  4739.     DONEM   A1
  4740.     CLR.L   (A4)+
  4741. .NSUP:  MOVE.W  .GL(PC),(A4)+
  4742.     MOVEQ   #0,D0
  4743.     MOVE.W  OSIZE(A0),D0
  4744.     MOVE.L  D0,(A4)+
  4745.     MOVE.L  OMETHOD(A0),A1      ; A1=METHODLIST
  4746. .ML:    BTST    #0,M_FLAGS(A1)
  4747.     BNE.S   .N
  4748.     MOVE.L  M_PROC(A1),A2
  4749.     MOVE.L  14(A2),A2       ; A2=IDENT
  4750.     MOVE.L  .MLEA(PC),(A4)+
  4751.     MOVE.W  .MLEA2(PC),NEWOP
  4752.     MOVE.W  10(A2),D0
  4753.     MOVE.L  A0,A3
  4754.     JSR ADDBRANCH
  4755.     MOVE.L  A3,A0
  4756.     MOVE.W  .MM(PC),(A4)+
  4757.     MOVE.W  M_OFF(A1),(A4)+
  4758. .N: MOVE.L  (A1),A1
  4759.     MOVE.L  A1,D0
  4760.     BNE.S   .ML
  4761.     MOVE.W  .RTS(PC),(A4)+
  4762.     MOVE.L  A4,CURACODE
  4763.     JSR CHECK3
  4764.     BRA .XL
  4765. .X: RTS
  4766. .J: JSR .X
  4767. .MLEA:  LEA .X(PC),A1
  4768. .MLEA2: LEA .X,A1
  4769. .MM:    MOVE.L  A1,4(A0)
  4770. .RTS:   RTS
  4771. .GL:    MOVE.L  #1,(A0)
  4772. ;*-*
  4773. ;; Link funcs
  4774. LINKFUNCS:
  4775.     MOVEM.L A6/D7,-(A7)
  4776.     TSTMOD
  4777.     BNE.S   .X
  4778.     LEA     EFUNCFLAGSTAB,A6
  4779.     MOVE.L  #EFUNCBYTE,A3
  4780.     MOVE.W  #NREFUNC,D2
  4781.     SUBQ.W  #1,D2
  4782.     MOVE.L  #EFUNCTAB,D4
  4783.     MOVEQ   #0,D3
  4784.     MOVE.L  CURACODE,A4     ; 32K VERWEG !
  4785. .1: TST.B   (A3)+
  4786.     BEQ.S   .2
  4787.     MOVE.W  D3,D0           ;
  4788.     LSL.W   #1,D0           ;
  4789.     MOVE.W  0(A6,D0),D7     ;
  4790.  
  4791.     MOVE.L  D4,A1
  4792.     MOVE.L  D3,D0
  4793.     MULU    #EFUNCENTRYSIZE,D0
  4794.     ADD.L   D0,A1
  4795.     MOVE.L  4(A1),A2       ; BEG CODE
  4796.     MOVE.L  8(A1),D1       ; END CODE
  4797.     MOVE.L  D3,D0
  4798.     ADD.L   #10,D0
  4799.     JSR ADDLABEL
  4800.     SUB.L   A2,D1
  4801.     LSR.L   #1,D1
  4802.     SUBQ.L  #1,D1
  4803. .3: MOVE.W  (A2)+,(A4)+
  4804.     DBRA    D1,.3
  4805. .2: ADDQ.L  #1,D3
  4806.     MOVE.L  A4,CURACODE
  4807.     JSR CHECK3
  4808.     DBRA    D2,.1
  4809. .X: MOVEM.L (A7)+,A6/D7
  4810.     RTS
  4811. ;*-*
  4812. ;; Link lib
  4813. LINKLIB:
  4814.     MOVEM.L D6/D7/A0-A2/A5/A6,-(A7)
  4815.     MOVE.L  #LIBHASH,A2
  4816.     MOVE.l  #255,D6
  4817.     MOVE.L  CURACODE,A4
  4818. .1:
  4819.     MOVE.L  (A2)+,D0
  4820. .LOOP:
  4821.     TST.L   D0
  4822.     BEQ.S   .EXIT
  4823.     MOVE.L  D0,A0
  4824.     MOVE.L  LIB_NEXT(A0),D0
  4825.     TST.L   LIB_USED(A0)
  4826.     BEQ     .LOOP
  4827.     CMP.W   #1,LIB_TYPE(A0)
  4828.     BEQ     .LOOP
  4829.     CMP.W   #2,LIB_TYPE(A0)
  4830.     BEQ     .LOOP
  4831.  
  4832.     MOVE.L  A4,A6
  4833.     MOVE.L  A4,LIB_USED(A0)
  4834.     MOVE.L  LIB_CLEN(A0),d7
  4835.     move.l  LIB_CODE(a0),a1
  4836.  
  4837.     lsr.l   #2,d7
  4838.     subq.l  #1,d7
  4839.     move.l  a4,a6
  4840. .COPY:
  4841.     move.l  (a1)+,(a4)+
  4842.     dbf     d7,.COPY
  4843.     bsr     FIXRELOC
  4844.     bra     .LOOP
  4845. .EXIT:
  4846.     DBRA    D6,.1
  4847.     MOVE.L  A4,CURACODE
  4848.     movem.l (a7)+,D6/d7/A0-A2/A5/a6
  4849.     rts
  4850. ;*-*
  4851.  
  4852. ;; FixReloc
  4853. FIXRELOC:
  4854. ; A6 - copied code start
  4855. ; A0 - code node
  4856.     MOVEM.L D0-A6,-(A7)
  4857.     MOVE.L  LIB_RELO(A0),d1       ; reloc
  4858.     BEQ     .EXIT
  4859.     MOVE.L  D1,A1
  4860.  
  4861.     cmp.l   #$3EC,(A1)+
  4862.     BNE     ERROR51
  4863.     move.l  (a1)+,d3
  4864.     addq.l  #4,a1           ; code
  4865.     subq.l  #1,d3
  4866. .LOOP:
  4867.     MOVE.L  (a1)+,d2
  4868.     move.l  a6,a4
  4869.     add.l   d2,a4
  4870.     move.l  (a4),d0
  4871.  
  4872.     add.l   a6,d0
  4873.     sub.l   ACODE,d0
  4874.     jsr     FORCEABSHERE
  4875.     dbf D3,.LOOP
  4876. .EXIT:
  4877.     MOVEM.L (A7)+,D0-A6
  4878.     RTS
  4879. ;*-*
  4880. ;*-*
  4881. ;; GenVars
  4882. ; THESE ARE SHARED!
  4883.  
  4884. GVA0D0D5_0:
  4885.     GENVAR  0,A0,D0,D5      ; IIII
  4886.     RTS
  4887.  
  4888.  
  4889. GVA0D0_0:
  4890.     GENVAR  0,A0,10(A0),D0      ; III
  4891.     RTS
  4892. GVA1D0_0:
  4893.     GENVAR  0,A1,10(A1),D0      ; III
  4894.     RTS
  4895. GVA0D1_0:
  4896.     GENVAR  0,A0,10(A0),D1      ; IIIII
  4897.     RTS
  4898. GVA0D2_0:
  4899.     MOVE.L  D1,-(A7)
  4900.     MOVE.L  D2,D1
  4901.     BSR     GVA0D1_0        ; II
  4902.     MOVE.L  (A7)+,D1
  4903.     RTS
  4904. GVA0D3_0:
  4905.     MOVE.L  D1,-(A7)
  4906.     MOVE.L  D3,D1
  4907.     BSR.W   GVA0D1_0        ; I
  4908.     MOVE.L  (A7)+,D1
  4909.     RTS
  4910. GVA0D4_0:
  4911.     MOVE.L  D1,-(A7)
  4912.     MOVE.L  D4,D1
  4913.     BSR.W   GVA0D1_0        ; I
  4914.     MOVE.L  (A7)+,D1
  4915.     RTS
  4916. GVA1D2_0:
  4917.     GENVAR  0,A1,10(A1),D2      ; I
  4918.     RTS
  4919. GVA6D3_0:
  4920.     GENVAR  0,A6,10(A6),D3      ; I
  4921.     RTS
  4922.  
  4923.  
  4924. GVA0D0_9:
  4925.     GENVAR  9,A0,10(A0),D0      ; II
  4926.     RTS
  4927. GVA0D2_9:
  4928.     MOVE.L  D0,-(A7)
  4929.     MOVE.L  D2,D0
  4930.     BSR.W   GVA0D0_9        ; I
  4931.     MOVE.L  (A7)+,D0
  4932.     RTS
  4933. GVA0D4_9:
  4934.     MOVE.L  D0,-(A7)
  4935.     MOVE.L  D4,D0
  4936.     BSR.W   GVA0D0_9        ; II
  4937.     MOVE.L  (A7)+,D0
  4938.     RTS
  4939. GVA0D5_9:
  4940.     MOVE.L  D0,-(A7)
  4941.     MOVE.L  D5,D0
  4942.     BSR.W   GVA0D0_9        ; I
  4943.     MOVE.L  (A7)+,D0
  4944.     RTS
  4945. GVA0D7_9:
  4946.     MOVE.L  D0,-(A7)
  4947.     MOVE.L  D7,D0
  4948.     BSR.W   GVA0D0_9        ; I
  4949.     MOVE.L  (A7)+,D0
  4950.     RTS
  4951.  
  4952. GVA1D2_9:
  4953.     GENVAR  9,A1,10(A1),D2      ; I
  4954.     RTS
  4955. GVA6D0_9:
  4956.     GENVAR  9,A6,10(A6),D0      ; I
  4957.     RTS
  4958. GVA6D3_9:
  4959.     MOVE.L  D0,-(A7)
  4960.     MOVE.L  D3,D0
  4961.     BSR.W   GVA6D0_9        ; II
  4962.     MOVE.L  (A7)+,D0
  4963.     RTS
  4964. ;*-*
  4965.  
  4966.  
  4967.